Я играю с Go (впервые в жизни) и хочу создать инструмент для извлечения изображений из Интернета и их обрезки (даже изменения размера), но я застрял на первом шаге.
package main
import (
"fmt"
"http"
)
var client = http.Client{}
func cutterHandler(res http.ResponseWriter, req *http.Request) {
reqImg, err := client.Get("http://www.google.com/intl/en_com/images/srpr/logo3w.png")
if err != nil {
fmt.Fprintf(res, "Error %d", err)
return
}
buffer := make([]byte, reqImg.ContentLength)
reqImg.Body.Read(buffer)
res.Header().Set("Content-Length", fmt.Sprint(reqImg.ContentLength)) /* value: 7007 */
res.Header().Set("Content-Type", reqImg.Header.Get("Content-Type")) /* value: image/png */
res.Write(buffer)
}
func main() {
http.HandleFunc("/cut", cutterHandler)
http.ListenAndServe(":8080", nil) /* TODO Configurable */
}
Я могу запросить изображение (давайте воспользуемся логотипом Google) и получить его вид и размер.
Действительно, я просто переписываю изображение (смотри на это как на игрушечный прокси)"), устанавливая Content-Length и Content-Type и записывая фрагмент байта обратно, но я где-то ошибаюсь.Посмотрите, как выглядит окончательное изображение, отображаемое в Chromium 12.0.742.112 (90304):
![Grotesque result](https://i.stack.imgur.com/4L5f7.png)
Также я проверил загруженный файл, и это изображение PNG размером 7007 байт.Он должен работать правильно, если мы посмотрим на запрос:
GET / cut HTTP / 1.1Пользователь-агент: curl / 7.22.0 (i486-pc-linux-gnu) libcurl / 7.22.0 OpenSSL / 1.0.0e zlib / 1.2.3.4 libidn / 1.23 libssh2 / 1.2.8 librtmp / 2.3Host: 127.0.0.1:8080Принять: /
HTTP / 1.1 200 OKДлина контента: 7007Тип контента: изображение / PNGДата: вторник, 27 декабря 2011 г. 19:51:53 GMT
[данные PNG]
Как вы думаете, что я здесь не так делаю?
Отказ от ответственности: Я чешую свой собственный зуд, поэтому, вероятно, я использую не тот инструмент :) В любом случае, я могу реализовать его на Ruby, но прежде чем я хотел бы попробовать Go.
Обновление: все еще чешется зудно ... я думаю, что это будет хороший сторонний проект, поэтому я открываю его https://github.com/imdario/go-lazor Если он бесполезен, по крайней мере, кто-то может найти полезность с помощью ссылок, использованных для его разработки,Они были для меня.