@ -1,2 +1,12 @@ |
|||||
# goImgCDN |
# goImgCDN |
||||
CDN for images, written in Go lang |
CDN for images, written in Go lang |
||||
|
|
||||
|
upload example (with curl): |
||||
|
``` |
||||
|
curl -F file=@./image1.png http://127.0.0.1:3050/image |
||||
|
``` |
||||
|
|
||||
|
to get image: |
||||
|
``` |
||||
|
http://127.0.0.1:3050/images/image1.png |
||||
|
``` |
@ -0,0 +1,57 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"bytes" |
||||
|
"image" |
||||
|
"image/jpeg" |
||||
|
"image/png" |
||||
|
"strings" |
||||
|
|
||||
|
"github.com/nfnt/resize" |
||||
|
) |
||||
|
|
||||
|
func dataToImage(data []byte, imageName string) (image.Image, error) { |
||||
|
reader := bytes.NewReader(data) |
||||
|
var imageExtension = strings.Split(imageName, ".")[1] |
||||
|
var img image.Image |
||||
|
var err error |
||||
|
switch imageExtension { |
||||
|
case "png": |
||||
|
img, err = png.Decode(reader) |
||||
|
case "jpg": |
||||
|
img, err = jpeg.Decode(reader) |
||||
|
case "jpeg": |
||||
|
img, err = jpeg.Decode(reader) |
||||
|
default: |
||||
|
img = nil |
||||
|
} |
||||
|
if err != nil { |
||||
|
return img, err |
||||
|
} |
||||
|
return img, err |
||||
|
} |
||||
|
|
||||
|
func imageToData(img image.Image, imageName string) ([]byte, error) { |
||||
|
buf := new(bytes.Buffer) |
||||
|
var imageExtension = strings.Split(imageName, ".")[1] |
||||
|
var err error |
||||
|
switch imageExtension { |
||||
|
case "png": |
||||
|
err = png.Encode(buf, img) |
||||
|
case "jpg": |
||||
|
err = jpeg.Encode(buf, img, nil) |
||||
|
case "jpeg": |
||||
|
err = jpeg.Encode(buf, img, nil) |
||||
|
default: |
||||
|
img = nil |
||||
|
} |
||||
|
if err != nil { |
||||
|
return buf.Bytes(), err |
||||
|
} |
||||
|
return buf.Bytes(), err |
||||
|
} |
||||
|
|
||||
|
func Resize(img image.Image) image.Image { |
||||
|
r := resize.Resize(160, 0, img, resize.Lanczos3) |
||||
|
return r |
||||
|
} |