diff --git a/kadai1/dshirae/README.md b/kadai1/dshirae/README.md new file mode 100644 index 0000000..de6065f --- /dev/null +++ b/kadai1/dshirae/README.md @@ -0,0 +1,43 @@ +# 開発内容 + +## 課題1 + +画像変換コマンドを作ろう + +### 次の仕様を満たすコマンドを作って下さい +- ディレクトリを指定する +- 指定したディレクトリ以下のJPGファイルをPNGに変換(デフォルト) +- ディレクトリ以下は再帰的に処理する +- 変換前と変換後の画像形式を指定できる(オプション) + +### 以下を満たすように開発してください +- mainパッケージと分離する +- 自作パッケージと標準パッケージと準標準パッケージのみ使う +- 準標準パッケージ:golang.org/x以下のパッケージ +- ユーザ定義型を作ってみる +- GoDocを生成してみる + +## 提出内容 + +`$ chpics dirname [-i=imgs -o=imgs]` + +### default動作 +指定されたdirectory内に含まれる全てのjpg画像をpng画像に変換する + +### option +- imgs : jpg/png/gif + +### + +## 課題の提出方法 + +``` +1回目の課題を提出する場合は次のようにコードを書いて下さい。 + +ブランチ名をkadai1-tenntennのようにする +kadai1/tenntennのようにディレクトリを作る +READMEに説明や文章による課題の回答を書く +PRを送る + +※FBには時間がかかる可能性があります。 +``` diff --git a/kadai1/dshirae/chimgs.go b/kadai1/dshirae/chimgs.go new file mode 100644 index 0000000..65f9a87 --- /dev/null +++ b/kadai1/dshirae/chimgs.go @@ -0,0 +1,35 @@ +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + + "./convert" +) + +// e.g.) chimgs dir [-i=jpg/png] [-o=png/jpg] +func main() { + + var ( + src = flag.String("i", "jpeg", "string flag") + dest = flag.String("o", "png", "string flag") + ) + flag.Parse() + + if (flag.NArg() == 0) && (flag.NFlag() == 0) { + fmt.Println("Usage: chimgs DIR [-i=imgext] [-o=imgext]") + os.Exit(1) + } + dirname := flag.Arg(0) + + filepath.Walk(dirname, + func(path string, info os.FileInfo, err error) error { + if info.IsDir() { + return nil + } + err = convert.PixFile(path, *src, *dest) + return err + }) +} diff --git a/kadai1/dshirae/convert/PixFile.go b/kadai1/dshirae/convert/PixFile.go new file mode 100644 index 0000000..13431ce --- /dev/null +++ b/kadai1/dshirae/convert/PixFile.go @@ -0,0 +1,71 @@ +package convert + +/* +画像変換コマンド + +次の仕様を満たすコマンドを作って下さい + + ディレクトリを指定する + 指定したディレクトリ以下のJPGファイルをPNGに変換(デフォルト) + ディレクトリ以下は再帰的に処理する + 変換前と変換後の画像形式を指定できる(オプション) + +以下を満たすように開発してください + + mainパッケージと分離する + 自作パッケージと標準パッケージと準標準パッケージのみ使う + 準標準パッケージ:golang.org/x以下のパッケージ + ユーザ定義型を作ってみる + GoDocを生成してみる +*/ + +import ( + "image" + "image/gif" + "image/jpeg" + "image/png" + "os" +) + +// picture file 変換関数 +func PixFile(org string, src string, dest string) error { + + // open file + file, err := os.Open(org) + if err != nil { + return err + } + defer file.Close() + + // image reading. + img, format, err := image.Decode(file) + if err != nil { + // not image + return err + } + + // 元ファイルが指定外ならスキップ + if format != src { + return nil + } + + // 出力先ファイル + savefile, err := os.Create(org + "." + dest) + if err != nil { + return err + } + defer savefile.Close() + + switch dest { + case "jpg", "jpeg": + opts := &jpeg.Options{} + jpeg.Encode(savefile, img, opts) + case "png": + png.Encode(savefile, img) + case "gif": + opts := &gif.Options{} + gif.Encode(savefile, img, opts) + } + + return nil +}