From ee68238f30b2122bfc74dc3225f966029caaf942 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Fri, 31 Jul 2020 07:21:32 +0200 Subject: [PATCH] Revert "Simplify image compression" This reverts commit 0f2ac430ceebeaa9ed9ca46de9c8ce069d81ee00. --- go.mod | 1 + go.sum | 2 + imagecompression.go | 93 +++++++-------------------------------------- 3 files changed, 17 insertions(+), 79 deletions(-) diff --git a/go.mod b/go.mod index 949edeb..429e5ae 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module git.jlel.se/jlelse/hugo-micropub go 1.14 require ( + codeberg.org/jlelse/tinify v0.0.0-20200123222407-7fc9c21822b0 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/gliderlabs/ssh v0.3.0 // indirect github.com/go-git/go-git/v5 v5.1.0 diff --git a/go.sum b/go.sum index 8433bcf..47fb773 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +codeberg.org/jlelse/tinify v0.0.0-20200123222407-7fc9c21822b0 h1:pJX79kTd01NtxEnzhfd4OU2SY9fquKVoO47DUeNKe+8= +codeberg.org/jlelse/tinify v0.0.0-20200123222407-7fc9c21822b0/go.mod h1:X6cM4Sn0aL/4VQ/ku11yxmiV0WIk5XAaYEPHQLQjFFM= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= diff --git a/imagecompression.go b/imagecompression.go index e0539a0..3471bca 100644 --- a/imagecompression.go +++ b/imagecompression.go @@ -1,15 +1,13 @@ package main import ( - "bytes" - "encoding/json" "errors" - "io" "io/ioutil" - "net/http" "os" "sort" "strings" + + tfgo "codeberg.org/jlelse/tinify" ) type ImageCompression interface { @@ -34,27 +32,32 @@ func (t *Tinify) Compress(url string) (location string, err error) { err = errors.New("file not supported") return } - // Shrink - shrinkedUrl, e := t.shrink(url) + tfgo.SetKey(t.key) + s, e := tfgo.FromUrl(url) if e != nil { err = errors.New("failed to compress file") return } - // Create temp file + e = s.Resize(&tfgo.ResizeOption{ + Method: tfgo.ResizeMethodScale, + Width: 2000, + }) + if e != nil { + err = errors.New("failed to resize file") + return + } file, e := ioutil.TempFile("", "tiny-*."+fileExtension) if e != nil { err = errors.New("failed to create temporary file") return } defer func() { - // Cleanup _ = file.Close() _ = os.Remove(file.Name()) }() - // Resize and download image - e = t.resize(shrinkedUrl, file) + e = s.ToFile(file.Name()) if e != nil { - err = errors.New("failed to resize file or save compressed file") + err = errors.New("failed to save compressed file") return } hashFile, e := os.Open(file.Name()) @@ -70,71 +73,3 @@ func (t *Tinify) Compress(url string) (location string, err error) { location, err = SelectedMediaStorage.Upload(fileName+"."+fileExtension, file) return } - -func (t *Tinify) shrink(source string) (string, error) { - type Source struct { - Url string `json:"url"` - } - data := struct { - Source Source `json:"source"` - }{ - Source: Source{ - Url: source, - }, - } - body := new(bytes.Buffer) - err := json.NewEncoder(body).Encode(data) - if err != nil { - return "", err - } - req, err := http.NewRequest("POST", "https://api.tinify.com/shrink", body) - if err != nil { - return "", err - } - req.SetBasicAuth("api", t.key) - req.Header.Set("Content-Type", "application/json") - resp, err := http.DefaultClient.Do(req) - if err != nil { - return "", err - } - if resp.StatusCode != 201 { - return "", errors.New("not 201 response code") - } - return resp.Header.Get("Location"), nil -} - -func (t *Tinify) resize(output string, file *os.File) error { - type Resize struct { - Method string `json:"method"` - Width int `json:"width"` - } - data := struct { - Resize Resize `json:"resize"` - }{ - Resize: Resize{ - Method: "scale", - Width: 2000, - }, - } - body := new(bytes.Buffer) - err := json.NewEncoder(body).Encode(data) - if err != nil { - return err - } - req, err := http.NewRequest("POST", output, body) - if err != nil { - return err - } - req.SetBasicAuth("api", t.key) - req.Header.Set("Content-Type", "application/json") - resp, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - if resp.StatusCode != 200 { - return errors.New("not 201 response code") - } - defer resp.Body.Close() - _, err = io.Copy(file, resp.Body) - return err -}