這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
測試地址
http://127.0.0.1:6789/1000/789.png
http://127.0.0.1:6789/400/789.png
中間數字是圖片尺寸
packagemain
import (
"fmt"
"graphics"
"image"
"image/png"
"log"
"net/http"
"os"
"strconv"
"strings"
)
func main() {
http.HandleFunc("/", doImageHandler)
http.ListenAndServe("127.0.0.1:6789", nil)
}func doImageHandler(w http.ResponseWriter, r *http.Request) {
fmt.Printf("%q\n", strings.Split(r.URL.Path, "/"))
url := strings.Split(r.URL.Path, "/")
if len(url) != 3 {
return
}
newdx, uerr := strconv.Atoi(url[1])
if uerr != nil {
log.Fatal(uerr)
}
src, err := LoadImage(url[2])
bound := src.Bounds()
dx := bound.Dx()
dy := bound.Dy()
if err != nil {
log.Fatal(err)
}
// 縮圖的大小
dst := image.NewRGBA(image.Rect(0, 0, newdx, newdx*dy/dx))
// 產生縮圖,等比例縮放
err = graphics.Scale(dst, src)
if err != nil {
log.Fatal(err)
}
header := w.Header()
header.Add("Content-Type", "image/jpeg")
png.Encode(w, dst)
}
// Load Image decodes an image from a file of image.
func LoadImage(path string) (img image.Image, err error) {
file, err := os.Open(path)
if err != nil {
return
}
defer file.Close()
img, _, err = image.Decode(file)
return
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。