はじめに
こんにちはRIN1208です。
本日はクリスマスイブですね!!自分は特に予定がなく部屋で過ごしてチキンを食べました!悲しい....
この記事は画像のサイズ圧縮をかなりの量をしなくてはいけなくなったのでその制作の途中経過です(深刻なアドベントカレンダーのネタ不足....)
またこの記事はITRCアドベントカレンダーの24日目の記事になります。
開発環境
- mac
- goの実行環境
今回使用したパッケージ
###インストール
$ go get github.com/google/uuid
$ go get github.com/nfnt/resize
今回のコード(下で順々に解説します)
package main
import (
"image"
"image/jpeg"
"image/png"
"io/ioutil"
"log"
"os"
"github.com/google/uuid"
"github.com/nfnt/resize"
)
func main() {
files, _ := ioutil.ReadDir("./image")
for _, f := range files {
save_image("./image/" + f.Name())
}
}
func save_image(filename string) {
path := "./datas/" //保存先のディレクトリ名になります。現時点のコードでは既に作成していないとエラーが出ます
uuid := create_uuid() //こちらの部分は後ほど解説します
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
img, data, err := image.Decode(file)
if err != nil {
log.Fatal(err)
}
file.Close()
m := resize.Resize(1000, 0, img, resize.Lanczos3)
if data == "png" {
out, err := os.Create(path + uuid + ".png")
if err != nil {
log.Fatal(err)
}
defer out.Close()
png.Encode(out, m)
} else if data == "jpeg" {
out, err := os.Create(path + uuid + ".jpeg")
if err != nil {
log.Fatal(err)
}
defer out.Close()
jpeg.Encode(out, m, nil)
}
}
func create_uuid() string {
u, _ := uuid.NewRandom()
uuid := u.String()
return uuid
}
特に難しいことはしてないでです
コードの解説
##main()の部分
files, _ := ioutil.ReadDir("./image")
for _, f := range files {
save_image("./image/" + f.Name())
}
ここではimageディレクト下の画像のファイル名を取得しsave_image()関数に画像ファイルのパスを渡しています。
save_image()の部分は下で説明します。
save_image()の部分
画像のリサイズは以下の部分でしています。数値を変更するとサイズも変更されます。
m := resize.Resize(1000, 0, img, resize.Lanczos3)
こちらの部分は取得した画像がpngならpng、jpegならjpegで保存するようにしています
if data == "png" {
out, err := os.Create(path + uuid + ".png")
if err != nil {
log.Fatal(err)
}
defer out.Close()
png.Encode(out, m)
} else if data == "jpeg" {
out, err := os.Create(path + uuid + ".jpeg")
if err != nil {
log.Fatal(err)
}
defer out.Close()
jpeg.Encode(out, m, nil)
}
create_uuid()の部分
ここに関しては特に説明するとがないですが今回使用した理由としては大量の画像のためファイル名がかぶらないようにしたかったので使用しました。(名前は適当でよかったので)
#終わりに
ここまで読んでいただきありがとうございます。今回ここに書いてあるのは制作途中にの物でありこれから並列処理を使用して大量の画像を処理していく予定です。