Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit 0504d55

Browse files
authored
Merge pull request #112 from ProgrammingLab/revert-109-gedorinku/resize_images
Revert "画像のリサイズ"
2 parents 91a0949 + 9d104ab commit 0504d55

File tree

5 files changed

+16
-178
lines changed

5 files changed

+16
-178
lines changed

app/run.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package app
22

33
import (
4-
"context"
5-
64
"github.com/grpc-ecosystem/grpc-gateway/runtime"
75
"github.com/izumin5210/grapi/pkg/grapiserver"
86
"github.com/rs/cors"
@@ -82,12 +80,5 @@ func Run() error {
8280
job.Start(store, cfg)
8381
defer job.Close()
8482

85-
go func() {
86-
err := store.ImageStore(context.TODO()).MigrateImages()
87-
if err != nil {
88-
grpclog.Errorf("%+v", err)
89-
}
90-
}()
91-
9283
return s.Serve()
9384
}

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,10 @@ require (
3737
github.com/volatiletech/sqlboiler v3.2.0+incompatible
3838
github.com/xanzy/go-gitlab v0.13.0 // indirect
3939
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
40-
golang.org/x/image v0.0.0-20190424155947-59b11bec70c7
4140
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1 // indirect
4241
golang.org/x/net v0.0.0-20190311183353-d8887717615a
4342
golang.org/x/oauth2 v0.0.0-20190111185915-36a7019397c4
44-
golang.org/x/sync v0.0.0-20190412183630-56d357773e84
43+
golang.org/x/sync v0.0.0-20190412183630-56d357773e84 // indirect
4544
golang.org/x/sys v0.0.0-20190219092855-153ac476189d // indirect
4645
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 // indirect
4746
google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,6 @@ golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnf
415415
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
416416
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
417417
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
418-
golang.org/x/image v0.0.0-20190424155947-59b11bec70c7 h1:OIchhgIITCxOyycwe8n9adxV37/WqbetxrpXNm7oPqI=
419-
golang.org/x/image v0.0.0-20190424155947-59b11bec70c7/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
420418
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
421419
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
422420
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1 h1:rJm0LuqUjoDhSk2zO9ISMSToQxGz7Os2jRiOL8AWu4c=

infra/store/image/image_store.go

Lines changed: 15 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,13 @@ import (
55
"context"
66
"crypto/rand"
77
"encoding/base64"
8-
"fmt"
98
"image"
10-
"image/gif"
11-
"image/jpeg"
12-
"image/png"
13-
"io"
14-
"strings"
9+
_ "image/gif" // for image
10+
_ "image/jpeg"
11+
_ "image/png"
1512

1613
"github.com/minio/minio-go"
1714
"github.com/pkg/errors"
18-
"golang.org/x/image/draw"
19-
"golang.org/x/sync/errgroup"
20-
"google.golang.org/grpc/grpclog"
2115

2216
"github.com/ProgrammingLab/prolab-accounts/infra/store"
2317
)
@@ -38,172 +32,33 @@ func NewImageStore(ctx context.Context, cli *minio.Client, bucket string) store.
3832
}
3933

4034
func (s *imageStoreImpl) CreateImage(img []byte) (filename string, err error) {
41-
name, err := generateFilename()
42-
if err != nil {
43-
return "", errors.WithStack(err)
44-
}
4535
r := bytes.NewReader(img)
46-
return s.createImage(name, r)
47-
}
48-
49-
func (s *imageStoreImpl) DeleteImage(filename string) error {
50-
err := s.cli.RemoveObject(s.bucketName, filename)
51-
return errors.WithStack(err)
52-
}
53-
54-
var (
55-
imageSizes = []int{
56-
64,
57-
128,
58-
256,
59-
512,
60-
}
61-
)
62-
63-
func (s *imageStoreImpl) MigrateImages() error {
64-
grpclog.Infoln("image migration started")
65-
66-
doneCh := make(chan struct{})
67-
defer close(doneCh)
68-
n := 0
69-
keys := make(map[string]struct{})
70-
for info := range s.cli.ListObjectsV2(s.bucketName, "", true, doneCh) {
71-
key := info.Key
72-
keys[key] = struct{}{}
73-
}
74-
75-
for key := range keys {
76-
if strings.HasSuffix(key, "px") {
77-
continue
78-
}
79-
80-
migrated := true
81-
for _, px := range imageSizes {
82-
_, ok := keys[filenameWithPx(key, px)]
83-
migrated = migrated && ok
84-
}
85-
if migrated {
86-
continue
87-
}
88-
89-
err := s.migrateImage(key)
90-
if err != nil {
91-
return err
92-
}
93-
grpclog.Infof("migrated %v", key)
94-
n++
95-
}
96-
97-
grpclog.Infof("migrated %v images!", n)
98-
99-
return nil
100-
}
101-
102-
func (s *imageStoreImpl) migrateImage(key string) error {
103-
i := strings.LastIndex(key, ".")
104-
name := key[:i]
105-
obj, err := s.cli.GetObjectWithContext(s.ctx, s.bucketName, key, minio.GetObjectOptions{})
106-
if err != nil {
107-
return errors.WithStack(err)
108-
}
109-
defer obj.Close()
110-
111-
_, err = s.createImage(name, obj)
36+
_, ext, err := image.DecodeConfig(r)
11237
if err != nil {
113-
return errors.WithStack(err)
38+
return "", errors.WithStack(err)
11439
}
115-
return nil
116-
}
117-
118-
func (s *imageStoreImpl) createImage(name string, img io.Reader) (filename string, err error) {
119-
var buf bytes.Buffer
120-
tee := io.TeeReader(img, &buf)
121-
src, ext, err := image.Decode(tee)
40+
name, err := generateFilename(ext)
12241
if err != nil {
12342
return "", errors.WithStack(err)
12443
}
12544

126-
eg := errgroup.Group{}
127-
128-
orgName := name + "." + ext
129-
eg.Go(func() error {
130-
opt := minio.PutObjectOptions{
131-
ContentType: "image/" + ext,
132-
}
133-
_, err := s.cli.PutObjectWithContext(s.ctx, s.bucketName, orgName, &buf, -1, opt)
134-
return errors.WithStack(err)
135-
})
136-
137-
for _, size := range imageSizes {
138-
px := size
139-
eg.Go(func() error {
140-
img := s.resize(src, px)
141-
err := s.putImage(img, filenameWithPx(name+"."+ext, px), ext)
142-
return errors.WithStack(err)
143-
})
45+
opt := minio.PutObjectOptions{
46+
ContentType: "image/" + ext,
14447
}
145-
146-
err = eg.Wait()
48+
_, err = s.cli.PutObjectWithContext(s.ctx, s.bucketName, name, r, r.Size(), opt)
14749
if err != nil {
148-
return "", err
149-
}
150-
return orgName, nil
151-
}
152-
153-
func (s *imageStoreImpl) resize(src image.Image, size int) image.Image {
154-
srcW, srcH := src.Bounds().Dx(), src.Bounds().Dy()
155-
if srcW <= size && srcH <= size {
156-
return src
157-
}
158-
159-
var (
160-
w int
161-
h int
162-
)
163-
// 長辺がsizeになるように比を変えずに縮小する
164-
if srcW < srcH {
165-
h = size
166-
w = srcW * size / srcH
167-
} else {
168-
w = size
169-
h = srcH * size / srcW
50+
return "", errors.WithStack(err)
17051
}
17152

172-
dst := image.NewRGBA(image.Rect(0, 0, w, h))
173-
draw.CatmullRom.Scale(dst, dst.Bounds(), src, src.Bounds(), draw.Over, nil)
174-
return dst
53+
return name, nil
17554
}
17655

177-
func (s *imageStoreImpl) putImage(img image.Image, filename, ext string) error {
178-
r, w := io.Pipe()
179-
go func() {
180-
var err error
181-
defer func() {
182-
e := w.CloseWithError(err)
183-
if e != nil {
184-
grpclog.Error(e)
185-
}
186-
}()
187-
switch ext {
188-
case "gif":
189-
err = errors.WithStack(gif.Encode(w, img, nil))
190-
case "jpeg":
191-
err = errors.WithStack(jpeg.Encode(w, img, nil))
192-
case "png":
193-
err = errors.WithStack(png.Encode(w, img))
194-
default:
195-
err = errors.WithStack(image.ErrFormat)
196-
}
197-
}()
198-
199-
opt := minio.PutObjectOptions{
200-
ContentType: "image/" + ext,
201-
}
202-
_, err := s.cli.PutObjectWithContext(s.ctx, s.bucketName, filename, r, -1, opt)
56+
func (s *imageStoreImpl) DeleteImage(filename string) error {
57+
err := s.cli.RemoveObject(s.bucketName, filename)
20358
return errors.WithStack(err)
20459
}
20560

206-
func generateFilename() (string, error) {
61+
func generateFilename(ext string) (string, error) {
20762
b := make([]byte, 32)
20863
_, err := rand.Read(b)
20964
if err != nil {
@@ -212,9 +67,5 @@ func generateFilename() (string, error) {
21267

21368
res := base64.RawURLEncoding.EncodeToString(b)
21469

215-
return string(res), nil
216-
}
217-
218-
func filenameWithPx(filename string, px int) string {
219-
return fmt.Sprintf("%v_%vpx", filename, px)
70+
return string(res) + "." + ext, nil
22071
}

infra/store/image_store.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@ package store
44
type ImageStore interface {
55
CreateImage(image []byte) (filename string, err error)
66
DeleteImage(filename string) error
7-
MigrateImages() error
87
}

0 commit comments

Comments
 (0)