Skip to content

Commit

Permalink
feat: support gif image (close #120).
Browse files Browse the repository at this point in the history
  • Loading branch information
wizjin committed Mar 11, 2022
1 parent e198b8b commit 6da744e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
18 changes: 14 additions & 4 deletions core/utils.go
Expand Up @@ -3,6 +3,7 @@ package core
import (
"bytes"
"encoding/json"
"image/gif"
"image/jpeg"
"image/png"
"io/ioutil"
Expand All @@ -17,6 +18,7 @@ import (

const (
pngHeader = "\x89PNG\r\n\x1a\n"
gifHeader = "GIF"
)

func (c *Core) bindBodyJSON(ctx *gin.Context, obj interface{}) error {
Expand Down Expand Up @@ -101,18 +103,26 @@ func parsePriority(priority string) int {
func parseImageContentType(data []byte) string {
if len(data) > len(pngHeader) && string(data[:len(pngHeader)]) == pngHeader {
return "image/png"
} else if len(data) > len(gifHeader) && string(data[:len(gifHeader)]) == gifHeader {
return "image/gif"
}
return "image/jpeg"
}

func createThumbnail(data []byte) *model.Thumbnail {
if parseImageContentType(data) == "image/png" {
switch parseImageContentType(data) {
case "image/png":
if cfg, err := png.DecodeConfig(bytes.NewReader(data)); err == nil {
return model.NewThumbnail(cfg.Width, cfg.Height)
}
}
if cfg, err := jpeg.DecodeConfig(bytes.NewReader(data)); err == nil {
return model.NewThumbnail(cfg.Width, cfg.Height)
case "image/gif":
if cfg, err := gif.DecodeConfig(bytes.NewReader(data)); err == nil {
return model.NewThumbnail(cfg.Width, cfg.Height)
}
default:
if cfg, err := jpeg.DecodeConfig(bytes.NewReader(data)); err == nil {
return model.NewThumbnail(cfg.Width, cfg.Height)
}
}
return nil
}
Expand Down
7 changes: 6 additions & 1 deletion core/utils_test.go
Expand Up @@ -91,9 +91,14 @@ func TestCreateThumbnail(t *testing.T) {
if tb1 == nil {
t.Error("Create png thumbnail failed")
}
d2, _ := base64.StdEncoding.DecodeString("/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAACAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAAAAAAAAAAACP/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAVAQEBAAAAAAAAAAAAAAAAAAAHCP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ABIOllv/2Q==")
d2, _ := base64.StdEncoding.DecodeString("R0lGODlhAQABAPABAAAAAP///yH5BAAAAAAAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAsAAAAAAEAAQAAAgJMAQA7")
tb2 := createThumbnail(d2)
if tb2 == nil {
t.Error("Create gif thumbnail failed")
}
d3, _ := base64.StdEncoding.DecodeString("/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAACAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAAAAAAAAAAACP/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAVAQEBAAAAAAAAAAAAAAAAAAAHCP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/ABIOllv/2Q==")
tb3 := createThumbnail(d3)
if tb3 == nil {
t.Error("Create jpeg thumbnail failed")
}
}
Expand Down

0 comments on commit 6da744e

Please sign in to comment.