/
thumbnail.go
77 lines (65 loc) · 2.1 KB
/
thumbnail.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
import (
"archive/zip"
"fmt"
"os"
"path/filepath"
"github.com/mryp/squidgirl-go/config"
"github.com/mryp/squidgirl-go/db"
)
//Thumbnail はサムネイル変換情報を保持する
type Thumbnail struct {
dirPath string
width uint
jpegQuality int
}
//NewThumbnail はサムネイル構造体をデフォルト値をセットして返す
func NewThumbnail() *Thumbnail {
thum := new(Thumbnail)
thum.dirPath = config.GetConfig().File.ThumbnailDirPath
thum.width = uint(config.GetConfig().File.ThumbnailWidth)
thum.jpegQuality = config.GetConfig().File.ThumbnailJpegQuality
return thum
}
//GetFilePathFromHash はアーカイブハッシュからサムネイルのファイルパスを取得する
func (thum *Thumbnail) GetFilePathFromHash(hash string) string {
return filepath.Join(thum.dirPath, hash+".jpg")
}
//GetFilePath はアーカイブのファイルパスからサムネイルのファイルパスを取得する
func (thum *Thumbnail) GetFilePath(bookPath string) string {
return thum.GetFilePathFromHash(db.CreateBookHash(bookPath))
}
//IsExist は指定したサムネイルファイルが存在するかどうかを返す
func (thum *Thumbnail) IsExist(filePath string) bool {
_, err := os.Stat(filePath)
if os.IsNotExist(err) {
return false
}
return true
}
//CreateFile はアーカイブファイルの先頭ファイル画像をサムネイル画像として保存する
func (thum *Thumbnail) CreateFile(bookPath string) error {
//ZIPファイルを開く
r, err := zip.OpenReader(bookPath)
if err != nil {
fmt.Printf("ZIPファイルオープンエラー err:%s\n", err)
return err
}
defer r.Close()
for _, f := range r.File {
//ZIPファイル内のファイルを開く
rc, err := f.Open()
if err != nil {
fmt.Printf("ZIP内ファイルオープンエラー err:%s\n", err)
continue
}
defer rc.Close()
if !f.FileInfo().IsDir() {
//最初のページファイルをサムネイル画像として作成する
resize := NewResize(0, thum.width, thum.jpegQuality)
resize.ResizeFile(rc, thum.GetFilePath(bookPath))
break
}
}
return nil
}