Skip to content
This repository has been archived by the owner on Jan 26, 2023. It is now read-only.

capture screenshot with parameters #9

Merged
merged 15 commits into from Nov 9, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
@@ -1,4 +1,6 @@
img/
bin
.DS_STORE

# Ignore everything in vendor/, except for *.go files,
# LICENSE and COPYING. Ignore Go tests.
Expand Down
18 changes: 13 additions & 5 deletions example/go/main.go
Expand Up @@ -7,16 +7,24 @@ import (
"log"
"net/http"
"net/url"
"os"

"github.com/pressly/screenshot/rpc/screenshot"
)

var (
flags = flag.NewFlagSet("screenshot", flag.ExitOnError)

// Logging options
window = flags.String("window", "800x600", "{width}x{height}")
)

func main() {
flag.Parse()
flags.Parse(os.Args[1:])

args := flag.Args()
if len(args) != 2 {
log.Fatalln("./example URL OUTPUT-FILE")
args := flags.Args()
if len(args) < 2 {
log.Fatalln("./example URL OUTPUT-FILE -window={width}x{height}")
}
urlLink, filename := args[0], args[1]

Expand All @@ -27,7 +35,7 @@ func main() {

client := screenshot.NewScreenshotJSONClient("http://localhost:6666", &http.Client{})

resp, err := client.Image(context.Background(), &screenshot.RequestImage{Url: u.String()})
resp, err := client.Image(context.Background(), &screenshot.RequestImage{Url: u.String(), Window: *window})
if err != nil {
log.Fatal(err)
}
Expand Down
1 change: 1 addition & 0 deletions go.mod
@@ -1,6 +1,7 @@
module github.com/pressly/screenshot

require (
github.com/chromedp/cdproto v0.0.0-20181103000133-6fb67cb3bc62 // indirect
github.com/chromedp/chromedp v0.1.2
github.com/golang/protobuf v1.2.0
github.com/pkg/errors v0.8.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
@@ -1,5 +1,7 @@
github.com/chromedp/cdproto v0.0.0-20180713053126-e314dc107013 h1:8nmuTwCseJcww39MvVHI59223+PxSzn6g3cl8ChF0/4=
github.com/chromedp/cdproto v0.0.0-20180713053126-e314dc107013/go.mod h1:C2GPAraqdt1KfZU7aSmx1XUgarNq/3JmxevQkmCjOVs=
github.com/chromedp/cdproto v0.0.0-20181103000133-6fb67cb3bc62 h1:Ccuq1Cp3Z0z2vXDC2fKTrWy6yRZrM626WEdrB+tSUew=
github.com/chromedp/cdproto v0.0.0-20181103000133-6fb67cb3bc62/go.mod h1:NcHZYATbiYX27TBzC98mmdw6oG1CGTiRXN+qGlkIzXs=
github.com/chromedp/chromedp v0.1.2 h1:qB/dpbbbOPGkKyZU2gKB49jp+ZvY9C3rPUfYELLz+6g=
github.com/chromedp/chromedp v0.1.2/go.mod h1:83UDY5CKmHrvKLQ6vVU+LVFUcfjOSPNufx8XFWLUYlQ=
github.com/disintegration/imaging v1.4.2 h1:BSVxoYQ2NfLdvIGCDD8GHgBV5K0FCEsc0d/6FxQII3I=
Expand Down
23 changes: 17 additions & 6 deletions lib/headless/headless.go
@@ -1,11 +1,10 @@
package headless

import (
"bytes"
"context"
"io"
"log"

"github.com/chromedp/cdproto/page"
"github.com/chromedp/chromedp"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -35,19 +34,31 @@ func (c *Chrome) Close() {
}
}

func (c *Chrome) NewImage(ctx context.Context, addr string) (io.Reader, error) {
func (c *Chrome) NewImage(ctx context.Context, addr string, x, y, width, height float64) ([]byte, error) {
// run task list

var buf []byte
err := c.Run(ctx,
chromedp.Tasks{
chromedp.Navigate(addr),
chromedp.WaitReady("body"),
chromedp.CaptureScreenshot(&buf)},
)
chromedp.CaptureScreenshot(&buf),
})
if err != nil {
return nil, err
}

currentTarget := c.GetHandlerByIndex(0)
image, err := page.CaptureScreenshot().WithClip(&page.Viewport{
X: x,
Y: y,
Width: width,
Height: height,
Scale: 1.0,
}).Do(ctx, currentTarget)
if err != nil {
return nil, err
}

return bytes.NewReader(buf), nil
return image, nil
}
57 changes: 46 additions & 11 deletions rpc/screenshot/service.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions rpc/screenshot/service.proto
Expand Up @@ -6,13 +6,14 @@ option go_package = "screenshot";
service Screenshot {
// Image takes a URL and produces a screenshot of that page.
rpc Image(RequestImage) returns (Resp);

// Image takes a URL and produces a screenshot of that page.
// rpc PDF(RequestImage) returns (Resp);
}

message RequestImage {
string url = 1;
string window = 2;
float x = 3;
float y = 4;
string crop = 5;
}

message Resp {
Expand Down