diff --git a/cdp.go b/cdp.go index 69cd053..2fe9ee1 100644 --- a/cdp.go +++ b/cdp.go @@ -192,7 +192,7 @@ func (rq *wrpReq) captureScreenshot() { } st := time.Now() var gifBuf bytes.Buffer - err = gif.Encode(&gifBuf, gifPalette(i, rq.imgOpt), &gif.Options{}) + err = gif.Encode(&gifBuf, gifPalette(i, rq.nColors), &gif.Options{}) if err != nil { log.Printf("%s Failed to encode GIF: %s\n", rq.r.RemoteAddr, err) fmt.Fprintf(rq.w, "
Unable to encode GIF:
%s
\n", err) @@ -202,7 +202,7 @@ func (rq *wrpReq) captureScreenshot() { sSize = fmt.Sprintf("%.0f KB", float32(len(gifBuf.Bytes()))/1024.0) iW = i.Bounds().Max.X iH = i.Bounds().Max.Y - log.Printf("%s Encoded GIF image: %s, Size: %s, Colors: %d, Res: %dx%d, Time: %vms\n", rq.r.RemoteAddr, imgPath, sSize, rq.imgOpt, iW, iH, time.Since(st).Milliseconds()) + log.Printf("%s Encoded GIF image: %s, Size: %s, Colors: %d, Res: %dx%d, Time: %vms\n", rq.r.RemoteAddr, imgPath, sSize, rq.nColors, iW, iH, time.Since(st).Milliseconds()) case "jpg": i, err := png.Decode(bytes.NewReader(pngCap)) if err != nil { @@ -212,7 +212,7 @@ func (rq *wrpReq) captureScreenshot() { } st := time.Now() var jpgBuf bytes.Buffer - err = jpeg.Encode(&jpgBuf, i, &jpeg.Options{Quality: *jpgQual}) + err = jpeg.Encode(&jpgBuf, i, &jpeg.Options{Quality: int(rq.jQual)}) if err != nil { log.Printf("%s Failed to encode JPG: %s\n", rq.r.RemoteAddr, err) fmt.Fprintf(rq.w, "
Unable to encode JPG:
%s
\n", err) @@ -222,7 +222,7 @@ func (rq *wrpReq) captureScreenshot() { sSize = fmt.Sprintf("%.0f KB", float32(len(jpgBuf.Bytes()))/1024.0) iW = i.Bounds().Max.X iH = i.Bounds().Max.Y - log.Printf("%s Encoded JPG image: %s, Size: %s, Quality: %d, Res: %dx%d, Time: %vms\n", rq.r.RemoteAddr, imgPath, sSize, *jpgQual, iW, iH, time.Since(st).Milliseconds()) + log.Printf("%s Encoded JPG image: %s, Size: %s, Quality: %d, Res: %dx%d, Time: %vms\n", rq.r.RemoteAddr, imgPath, sSize, *defJpgQual, iW, iH, time.Since(st).Milliseconds()) } rq.printUI(uiParams{ bgColor: fmt.Sprintf("#%02X%02X%02X", r, g, b), diff --git a/txt.go b/txt.go index 408b7d3..123ffed 100644 --- a/txt.go +++ b/txt.go @@ -14,7 +14,7 @@ package main // reproduces on vsi vms docs // - BUG: markdown table errors // reproduces on hacker news -// - BUG: captcha errors using html to markdown, perhaps use cdp inner html +// - BUG: captcha errors using html to markdown, perhaps use cdp inner html + downloaded images // reproduces on https://www.cnn.com/cnn-underscored/electronics import ( @@ -196,7 +196,14 @@ func (rq *wrpReq) captureMarkdown() { return } log.Printf("Got %v bytes md from %v", len(md), rq.url) - t := &astTransformer{imgType: rq.imgType, maxSize: int(rq.maxSize), imgOpt: int(rq.imgOpt)} // TODO: maxSize still doesn't work + var imgOpt int + switch rq.imgType { + case "jpg": + imgOpt = int(rq.jQual) + case "gif": + imgOpt = int(rq.nColors) + } + t := &astTransformer{imgType: rq.imgType, maxSize: int(rq.maxSize), imgOpt: imgOpt} gm := goldmark.New( goldmark.WithExtensions(extension.GFM), goldmark.WithParserOptions(parser.WithASTTransformers(util.Prioritized(t, 100))), diff --git a/wrp.go b/wrp.go index 9823702..757cf38 100644 --- a/wrp.go +++ b/wrp.go @@ -36,7 +36,7 @@ var ( defType = flag.String("t", "gif", "Image type: png|gif|jpg") wrpMode = flag.String("m", "ismap", "WRP Mode: ismap|html") defImgSize = flag.Int64("is", 200, "html mode default image size") - jpgQual = flag.Int("q", 75, "Jpeg image quality, default 75%") // TODO: this should be form dropdown when jpeg is selected as image type + defJpgQual = flag.Int64("q", 75, "Jpeg image quality, default 75%") // TODO: this should be form dropdown when jpeg is selected as image type fgeom = flag.String("g", "1152x600x216", "Geometry: width x height x colors, height can be 0 for unlimited") htmFnam = flag.String("ui", "wrp.html", "HTML template file for the UI") delay = flag.Duration("s", 2*time.Second, "Delay/sleep after page is rendered and before screenshot is taken") @@ -72,6 +72,7 @@ type uiData struct { URL string BgColor string NColors int64 + JQual int64 Width int64 Height int64 Zoom float64 @@ -100,19 +101,19 @@ type uiParams struct { // WRP Request type wrpReq struct { - url string // url - width int64 // width - height int64 // height - zoom float64 // zoom/scale - colors int64 // #colors - mouseX int64 // mouseX - mouseY int64 // mouseY - keys string // keys to send - buttons string // Fn buttons - imgType string // imgtype - wrpMode string // mode ismap/html - maxSize int64 // image max size for html mode - imgOpt int64 + url string + width int64 + height int64 + zoom float64 + nColors int64 + jQual int64 + mouseX int64 + mouseY int64 + keys string + buttons string + imgType string + wrpMode string + maxSize int64 w http.ResponseWriter r *http.Request } @@ -138,9 +139,19 @@ func (rq *wrpReq) parseForm() { if rq.zoom < 0.1 { rq.zoom = 1.0 } - rq.colors, _ = strconv.ParseInt(rq.r.FormValue("c"), 10, 64) // TODO: this needs to be jpeg quality as well - if rq.colors < 2 || rq.colors > 256 { // ... but maybe not because of this? - rq.colors = defGeom.c + rq.imgType = rq.r.FormValue("t") + switch rq.imgType { + case "png", "gif", "jpg": + default: + rq.imgType = *defType + } + rq.nColors, _ = strconv.ParseInt(rq.r.FormValue("c"), 10, 64) + if rq.nColors < 2 || rq.nColors > 256 { + rq.nColors = defGeom.c + } + rq.jQual, _ = strconv.ParseInt(rq.r.FormValue("q"), 10, 64) + if rq.jQual < 1 || rq.jQual > 100 { + rq.jQual = *defJpgQual } rq.keys = rq.r.FormValue("k") rq.buttons = rq.r.FormValue("Fn") @@ -148,17 +159,6 @@ func (rq *wrpReq) parseForm() { if rq.maxSize == 0 { rq.maxSize = *defImgSize } - rq.imgType = rq.r.FormValue("t") - switch rq.imgType { - case "png": - case "gif": - rq.imgOpt = defGeom.c - case "jpg": - rq.imgOpt = int64(*jpgQual) - default: - rq.imgType = *defType - rq.imgOpt = 80 // TODO: fixme, this needs to be different based on image type - } log.Printf("%s WrpReq from UI Form: %+v\n", rq.r.RemoteAddr, rq) } @@ -177,7 +177,8 @@ func (rq *wrpReq) printUI(p uiParams) { BgColor: p.bgColor, Width: rq.width, Height: rq.height, - NColors: rq.colors, // TODO: this needs to be also jpeg quality + NColors: rq.nColors, + JQual: rq.jQual, Zoom: rq.zoom, MaxSize: rq.maxSize, ImgType: rq.imgType, diff --git a/wrp.html b/wrp.html index af34cc1..2514af0 100644 --- a/wrp.html +++ b/wrp.html @@ -41,6 +41,7 @@ + {{ if eq .ImgType "gif" }} C + {{ end }} + {{ if eq .ImgType "jpg" }} + Q % + {{ end }} {{ if eq .WrpMode "ismap" }} K