-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathimgChange.go
139 lines (116 loc) · 3.18 KB
/
imgChange.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
ディレクトリを指定する
指定したディレクトリ以下のJPGファイルをPNGに変換
ディレクトリ以下は再帰的に処理する
変換前と変換後の画像形式を指定できる
mainパッケージと分離する
自作パッケージと標準パッケージと準標準パッケージのみ使う
準標準パッケージ:golang.org/x以下のパッケージ
ユーザ定義型を作ってみる
GoDocを生成してみる
*/
package main
import (
"fmt"
"io/ioutil"
"path/filepath"
"strings"
"./changefunc"
)
//エラーハンドリング
func ec(err *error) {
if *err != nil {
fmt.Println(*err)
panic(*err)
}
}
//ユーザー定義型
type fileName string
//拡張子を表示
func (fileName fileName) Extension() string {
return strings.Split(string(fileName), ".")[1]
}
func main() {
for {
fmt.Println("以下の中から画像を変換するディレクトリを選んでください")
var fileNameSlice []string
files, _ := ioutil.ReadDir("./") //カレントディレクトリをls
for _, file := range files {
fileNameSlice = append(fileNameSlice, file.Name())
}
fmt.Println(fileNameSlice) //カレントディレクトリのファイル一覧を表示
var input string
fmt.Scan(&input) //標準入力から文字列取得
//検索
var err error
results, err := searchDir(input)
//エラーが起きたらもう一度
if err != nil {
fmt.Println("正しく入力してください")
continue
}
fmt.Println(results) //選択したディレクトリ以下のファイルを全表示
check := true
for _, result := range results {
filename := fileName(result)
if filename.Extension() != "jpg" &&
filename.Extension() != "jpeg" &&
filename.Extension() != "png" {
check = false
}
/*newFileNameSlice := strings.Split(result, ".")
if newFileNameSlice[len(newFileNameSlice)-1] != "jpg" &&
newFileNameSlice[len(newFileNameSlice)-1] != "jpeg" &&
newFileNameSlice[len(newFileNameSlice)-1] != "png" {
check = false
}
*/
}
if check == false {
fmt.Println("変換可能な画像ファイルがありません")
continue
}
//resultに入ってるパスの画像を変換
input = ""
for {
fmt.Println("変換先のファイル形式を選んで下さい")
fmt.Println("jpg or png")
fmt.Scan(&input) //標準入力から文字列取得
if input != "jpg" &&
input != "png" {
fmt.Println("正しく入力してください")
continue
} else {
break
}
}
fmt.Println(input + "を選択") //変換ファイル形式
//画像変換処理
success := 0
if input == "jpg" {
success = changefunc.PngToJpg(results, input)
} else if input == "png" {
success = changefunc.JpgToPng(results, input)
}
if success > 0 {
fmt.Println("完了")
break
} else {
continue
}
}
}
func searchDir(dir string) ([]string, error) {
files, err := ioutil.ReadDir(dir)
var paths []string
for _, file := range files {
if file.IsDir() {
var path []string
path, err = searchDir(filepath.Join(dir, file.Name()))
paths = append(paths, path...)
continue
}
paths = append(paths, filepath.Join(dir, file.Name()))
}
return paths, err
}