From b5bfc4bc23004614ed7390f9937c3a5e5967299e Mon Sep 17 00:00:00 2001 From: hiroygo Date: Sat, 11 Jul 2020 23:33:59 +0900 Subject: [PATCH 1/6] add testdata --- kadai2/hiroygo/testdata/go.bmp | Bin 0 -> 270054 bytes kadai2/hiroygo/testdata/go.gif | Bin 0 -> 3782 bytes kadai2/hiroygo/testdata/go.jpeg | Bin 0 -> 10795 bytes kadai2/hiroygo/testdata/go.jpg | Bin 0 -> 10795 bytes kadai2/hiroygo/testdata/go.png | Bin 0 -> 46110 bytes kadai2/hiroygo/testdata/go.tiff | Bin 0 -> 360324 bytes kadai2/hiroygo/testdata/sub/go.jpg | Bin 0 -> 10795 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 kadai2/hiroygo/testdata/go.bmp create mode 100644 kadai2/hiroygo/testdata/go.gif create mode 100644 kadai2/hiroygo/testdata/go.jpeg create mode 100644 kadai2/hiroygo/testdata/go.jpg create mode 100644 kadai2/hiroygo/testdata/go.png create mode 100644 kadai2/hiroygo/testdata/go.tiff create mode 100644 kadai2/hiroygo/testdata/sub/go.jpg diff --git a/kadai2/hiroygo/testdata/go.bmp b/kadai2/hiroygo/testdata/go.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0516debb4f6f2390169bc6c2e19b6c336257ffab GIT binary patch literal 270054 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 CRVM%d literal 0 HcmV?d00001 diff --git a/kadai2/hiroygo/testdata/go.gif b/kadai2/hiroygo/testdata/go.gif new file mode 100644 index 0000000000000000000000000000000000000000..31350e1218a7255d25d46efa3fbe8190309e3f59 GIT binary patch literal 3782 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 literal 0 HcmV?d00001 diff --git a/kadai2/hiroygo/testdata/go.jpeg b/kadai2/hiroygo/testdata/go.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..46ed1e0c129dbaf4318e572999d7fbec3cee2e43 GIT binary patch literal 10795 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 P89HJhNRvWdY%l*G8r6`O literal 0 HcmV?d00001 diff --git a/kadai2/hiroygo/testdata/go.jpg b/kadai2/hiroygo/testdata/go.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46ed1e0c129dbaf4318e572999d7fbec3cee2e43 GIT binary patch literal 10795 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 P89HJhNRvWdY%l*G8r6`O literal 0 HcmV?d00001 diff --git a/kadai2/hiroygo/testdata/go.png b/kadai2/hiroygo/testdata/go.png new file mode 100644 index 0000000000000000000000000000000000000000..f3737d85735960b5d116fae552af2e9d6f56071e GIT binary patch literal 46110 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 literal 0 HcmV?d00001 diff --git a/kadai2/hiroygo/testdata/sub/go.jpg b/kadai2/hiroygo/testdata/sub/go.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46ed1e0c129dbaf4318e572999d7fbec3cee2e43 GIT binary patch literal 10795 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 P89HJhNRvWdY%l*G8r6`O literal 0 HcmV?d00001 From 8aa3f38920c92bc56ef638a63260f20986badeb1 Mon Sep 17 00:00:00 2001 From: hiroygo Date: Sat, 11 Jul 2020 23:37:17 +0900 Subject: [PATCH 2/6] add go mod --- kadai2/hiroygo/.gitignore | 354 ++++++++++++++++++++++++++++++++++++++ kadai2/hiroygo/go.mod | 5 + kadai2/hiroygo/go.sum | 4 + 3 files changed, 363 insertions(+) create mode 100644 kadai2/hiroygo/.gitignore create mode 100644 kadai2/hiroygo/go.mod create mode 100644 kadai2/hiroygo/go.sum diff --git a/kadai2/hiroygo/.gitignore b/kadai2/hiroygo/.gitignore new file mode 100644 index 0000000..39a03ac --- /dev/null +++ b/kadai2/hiroygo/.gitignore @@ -0,0 +1,354 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# add +*.o +.vscode/ \ No newline at end of file diff --git a/kadai2/hiroygo/go.mod b/kadai2/hiroygo/go.mod new file mode 100644 index 0000000..3a7046d --- /dev/null +++ b/kadai2/hiroygo/go.mod @@ -0,0 +1,5 @@ +module github.com/gopherdojo/dojo8/kadai2/hiroygo + +go 1.14 + +require golang.org/x/image v0.0.0-20200618115811-c13761719519 diff --git a/kadai2/hiroygo/go.sum b/kadai2/hiroygo/go.sum new file mode 100644 index 0000000..83da957 --- /dev/null +++ b/kadai2/hiroygo/go.sum @@ -0,0 +1,4 @@ +github.com/gopherdojo/dojo8 v0.0.0-20200703052727-6a79d18126bf h1:lpYevjFQMxI5VNBc3WXV6Z5pDDrdppdDKwmeBoyt5BE= +golang.org/x/image v0.0.0-20200618115811-c13761719519 h1:1e2ufUJNM3lCHEY5jIgac/7UTjd6cgJNdatjPdFWf34= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= From 64851b1b86bca2e91b7797c6ee648bc5d748135f Mon Sep 17 00:00:00 2001 From: hiroygo Date: Sun, 12 Jul 2020 14:34:36 +0900 Subject: [PATCH 3/6] =?UTF-8?q?add=20=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kadai2/hiroygo/imgconv/imgconv.go | 160 ++++++++++++++++++++ kadai2/hiroygo/imgconv/imgconv_test.go | 194 +++++++++++++++++++++++++ kadai2/hiroygo/main.go | 56 +++++++ 3 files changed, 410 insertions(+) create mode 100644 kadai2/hiroygo/imgconv/imgconv.go create mode 100644 kadai2/hiroygo/imgconv/imgconv_test.go create mode 100644 kadai2/hiroygo/main.go diff --git a/kadai2/hiroygo/imgconv/imgconv.go b/kadai2/hiroygo/imgconv/imgconv.go new file mode 100644 index 0000000..dc3be28 --- /dev/null +++ b/kadai2/hiroygo/imgconv/imgconv.go @@ -0,0 +1,160 @@ +package imgconv + +import ( + "fmt" + "image" + "image/gif" + "image/jpeg" + "image/png" + "os" + "path/filepath" + "strings" + + "golang.org/x/image/bmp" + "golang.org/x/image/tiff" +) + +const ( + // Unknown 不明な画像 + Unknown ImageType = "unknown" + // Jpeg Jpeg 画像 + Jpeg ImageType = "jpg" + // Png Png 画像 + Png ImageType = "png" + // Tiff Tiff 画像 + Tiff ImageType = "tiff" + // Bmp Bmp 画像 + Bmp ImageType = "bmp" + // Gif Gif 画像 + Gif ImageType = "gif" +) + +// ImageType 画像種別 +type ImageType string + +func (t ImageType) String() string { + return string(t) +} + +// ToImageType 文字列を ImageType に変換する +// e.g. "jpg" => Jpeg +func ToImageType(s string) ImageType { + switch s { + case "jpeg", "jpg": + return Jpeg + case "png": + return Png + case "tiff": + return Tiff + case "bmp": + return Bmp + case "gif": + return Gif + default: + return Unknown + } +} + +func imageTypeFromFileName(name string) ImageType { + extWithoutDot := strings.TrimLeft(filepath.Ext(name), ".") + return ToImageType(strings.ToLower(extWithoutDot)) +} + +// ImageFilePathesRecursive ディレクトリ内の指定された画像種別のファイルパスを再帰的に返す +func ImageFilePathesRecursive(dir string, target ImageType) ([]string, error) { + var pathes []string + err := filepath.Walk(dir, func(visitPath string, f os.FileInfo, err error) error { + if err != nil { + return fmt.Errorf("WalkFunc error, %w", err) + } + + if !f.Mode().IsRegular() { + return nil + } + + t := imageTypeFromFileName(f.Name()) + if t != target { + return nil + } + + pathes = append(pathes, visitPath) + return nil + }) + if err != nil { + return nil, fmt.Errorf("Walk error, %w", err) + } + + return pathes, nil +} + +// LoadImage 画像を読み込み、その Image を返す +func LoadImage(path string) (image.Image, error) { + f, err := os.Open(path) + if err != nil { + return nil, fmt.Errorf("Open error, %w", err) + } + defer f.Close() + + m, _, err := image.Decode(f) + if err != nil { + return nil, fmt.Errorf("Decode error, %w", err) + } + + return m, nil +} + +// ReplaceExt 画像ファイルパスの拡張子を置換した結果を返す +func ReplaceExt(path string, replace ImageType) string { + newName := filepath.Base(path[:len(path)-len(filepath.Ext(path))]) + newName += "." + replace.String() + return filepath.Join(filepath.Dir(path), newName) +} + +// SaveImage Image を指定された画像形式で保存する +func SaveImage(m image.Image, out ImageType, savePath string) (rerr error) { + if m == nil { + return fmt.Errorf("Image が nil です") + } + + var encoder func(*os.File, image.Image) error + switch out { + case Jpeg: + encoder = func(f *os.File, m image.Image) error { + return jpeg.Encode(f, m, nil) + } + case Png: + encoder = func(f *os.File, m image.Image) error { + return png.Encode(f, m) + } + case Tiff: + encoder = func(f *os.File, m image.Image) error { + return tiff.Encode(f, m, nil) + } + case Bmp: + encoder = func(f *os.File, m image.Image) error { + return bmp.Encode(f, m) + } + case Gif: + encoder = func(f *os.File, m image.Image) error { + return gif.Encode(f, m, nil) + } + default: + return fmt.Errorf("画像種別 %s は不明です", out.String()) + } + + f, err := os.Create(savePath) + if err != nil { + return fmt.Errorf("Create error, %w", err) + } + defer func() { + if err := f.Close(); err != nil { + rerr = fmt.Errorf("Close error, %w", err) + } + }() + + if err := encoder(f, m); err != nil { + return fmt.Errorf("Encode error, %w", err) + } + + return +} diff --git a/kadai2/hiroygo/imgconv/imgconv_test.go b/kadai2/hiroygo/imgconv/imgconv_test.go new file mode 100644 index 0000000..a3f14ab --- /dev/null +++ b/kadai2/hiroygo/imgconv/imgconv_test.go @@ -0,0 +1,194 @@ +package imgconv_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "reflect" + "testing" + + "github.com/gopherdojo/dojo8/kadai2/hiroygo/imgconv" +) + +var testdataDir string = filepath.Join("..", "testdata") +var testdataSubDir string = filepath.Join(testdataDir, "sub") +var testJpgFile string = filepath.Join(testdataDir, "go.jpg") +var testJpegFile string = filepath.Join(testdataDir, "go.jpeg") +var testSubJpgFile string = filepath.Join(testdataSubDir, "go.jpg") +var testPngFile string = filepath.Join(testdataDir, "go.png") +var testTiffFile string = filepath.Join(testdataDir, "go.tiff") +var testBmpFile string = filepath.Join(testdataDir, "go.bmp") +var testGifFile string = filepath.Join(testdataDir, "go.gif") + +func TestToImageType(t *testing.T) { + cases := []struct { + name string + input string + expected imgconv.ImageType + }{ + {name: "jpg", input: "jpg", expected: imgconv.Jpeg}, + {name: "jpeg", input: "jpeg", expected: imgconv.Jpeg}, + {name: "png", input: "png", expected: imgconv.Png}, + {name: "tiff", input: "tiff", expected: imgconv.Tiff}, + {name: "bmp", input: "bmp", expected: imgconv.Bmp}, + {name: "gif", input: "gif", expected: imgconv.Gif}, + {name: "txt", input: "txt", expected: imgconv.Unknown}, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + if actual := imgconv.ToImageType(c.input); actual != c.expected { + t.Errorf("want ToImageType(%s) = %v, got %v", c.input, c.expected, actual) + } + }) + } +} + +func TestImageFilePathesRecursive(t *testing.T) { + cases := []struct { + name string + dir string + imgType imgconv.ImageType + expectedPathes []string + }{ + {name: "jpg_files", dir: testdataDir, imgType: imgconv.Jpeg, expectedPathes: []string{testJpegFile, testJpgFile, testSubJpgFile}}, + {name: "png_files", dir: testdataDir, imgType: imgconv.Png, expectedPathes: []string{testPngFile}}, + {name: "tiff_files", dir: testdataDir, imgType: imgconv.Tiff, expectedPathes: []string{testTiffFile}}, + {name: "bmp_files", dir: testdataDir, imgType: imgconv.Bmp, expectedPathes: []string{testBmpFile}}, + {name: "gif_files", dir: testdataDir, imgType: imgconv.Gif, expectedPathes: []string{testGifFile}}, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + actual, err := imgconv.ImageFilePathesRecursive(c.dir, c.imgType) + if err != nil { + t.Fatalf("ImageFilePathesRecursive(%s, %v) error %v", c.dir, c.imgType, err) + } + + // NOTE:expectedPathes と actual の中身の順序まで一致しないと成功にならない + // e.g. expectedPathes:{"test1.jpg", "test2.jpg"}, actual:{"test1.jpg", "test2.jpg"} => OK + // e.g. expectedPathes:{"test1.jpg", "test2.jpg"}, actual:{"test2.jpg", "test1.jpg"} => NG + if !reflect.DeepEqual(actual, c.expectedPathes) { + t.Errorf("want ImageFilePathesRecursive(%s, %v) = %v, got %v", c.dir, c.imgType, c.expectedPathes, actual) + } + }) + } +} + +func TestLoadImage(t *testing.T) { + cases := []struct { + name string + path string + wantErr bool + }{ + {name: "jpg", path: testJpgFile, wantErr: false}, + {name: "png", path: testPngFile, wantErr: false}, + {name: "tiff", path: testTiffFile, wantErr: false}, + {name: "bmp", path: testBmpFile, wantErr: false}, + {name: "gif", path: testGifFile, wantErr: false}, + {name: "directory", path: testdataDir, wantErr: true}, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + _, err := imgconv.LoadImage(c.path) + if !c.wantErr && err != nil { + t.Errorf("LoadImage(%s) error %v", c.path, err) + } + }) + } +} + +func TestReplaceExt(t *testing.T) { + cases := []struct { + name string + path string + outType imgconv.ImageType + expected string + }{ + {name: "without_ext", path: "test", outType: imgconv.Jpeg, expected: "test.jpg"}, + {name: "ends_dot", path: "test.", outType: imgconv.Jpeg, expected: "test.jpg"}, + {name: "begin_dot", path: ".test.", outType: imgconv.Jpeg, expected: ".test.jpg"}, + {name: "only_dot", path: ".", outType: imgconv.Jpeg, expected: "..jpg"}, + {name: "empty", path: "", outType: imgconv.Jpeg, expected: "..jpg"}, + {name: "has_parent_dir", path: testJpgFile, outType: imgconv.Png, expected: testPngFile}, + {name: "jpg", path: testPngFile, outType: imgconv.Jpeg, expected: testJpgFile}, + {name: "png", path: testJpgFile, outType: imgconv.Png, expected: testPngFile}, + {name: "tiff", path: testJpgFile, outType: imgconv.Tiff, expected: testTiffFile}, + {name: "bmp", path: testJpgFile, outType: imgconv.Bmp, expected: testBmpFile}, + {name: "gif", path: testJpgFile, outType: imgconv.Gif, expected: testGifFile}, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + actual := imgconv.ReplaceExt(c.path, c.outType) + if actual != c.expected { + t.Errorf("want ReplaceExt(%s, %v) = %s, got %s", c.path, c.outType, c.expected, actual) + } + }) + } +} + +func tempDir(t *testing.T) string { + t.Helper() + dir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("TempDir error %v", err) + } + + t.Cleanup(func() { + if err := os.RemoveAll(dir); err != nil { + t.Fatalf("RemoveAll error %v", err) + } + }) + + return dir +} + +func TestSaveImage(t *testing.T) { + tmpDir := tempDir(t) + saveFileBase := filepath.Join(tmpDir, "test") + + type saveParam struct { + name string + saveType imgconv.ImageType + savePath string + wantErr bool + } + saveParams := []saveParam{ + {name: "jpg", saveType: imgconv.Jpeg, savePath: imgconv.ReplaceExt(saveFileBase, imgconv.Jpeg), wantErr: false}, + {name: "png", saveType: imgconv.Png, savePath: imgconv.ReplaceExt(saveFileBase, imgconv.Png), wantErr: false}, + {name: "tiff", saveType: imgconv.Tiff, savePath: imgconv.ReplaceExt(saveFileBase, imgconv.Tiff), wantErr: false}, + {name: "bmp", saveType: imgconv.Bmp, savePath: imgconv.ReplaceExt(saveFileBase, imgconv.Bmp), wantErr: false}, + {name: "gif", saveType: imgconv.Gif, savePath: imgconv.ReplaceExt(saveFileBase, imgconv.Gif), wantErr: false}, + {name: "unknown", saveType: imgconv.Unknown, savePath: imgconv.ReplaceExt(saveFileBase, imgconv.Unknown), wantErr: true}, + } + + cases := []struct { + name string + srcPath string + saveParams []saveParam + }{ + {name: "jpg_to", srcPath: testJpgFile, saveParams: saveParams}, + {name: "png_to", srcPath: testPngFile, saveParams: saveParams}, + {name: "tiff_to", srcPath: testTiffFile, saveParams: saveParams}, + {name: "bmp_to", srcPath: testBmpFile, saveParams: saveParams}, + {name: "gif_to", srcPath: testGifFile, saveParams: saveParams}, + } + + for _, c := range cases { + for _, innerCase := range c.saveParams { + t.Run(c.name+"_"+innerCase.name, func(t *testing.T) { + m, err := imgconv.LoadImage(c.srcPath) + if err != nil { + t.Fatalf("LoadImage(%s) error %v", c.srcPath, err) + } + + err = imgconv.SaveImage(m, innerCase.saveType, innerCase.savePath) + if !innerCase.wantErr && err != nil { + t.Errorf("SaveImage(image.Image, %v, %s) error %v", innerCase.saveType, innerCase.savePath, err) + } + }) + } + } +} diff --git a/kadai2/hiroygo/main.go b/kadai2/hiroygo/main.go new file mode 100644 index 0000000..ef567da --- /dev/null +++ b/kadai2/hiroygo/main.go @@ -0,0 +1,56 @@ +package main + +import ( + "flag" + "fmt" + "os" + + "github.com/gopherdojo/dojo8/kadai2/hiroygo/imgconv" +) + +func parseArgs() (dir string, in, out imgconv.ImageType, err error) { + d := flag.String("d", "./", "変換の対象となる画像が格納されたディレクトリパス") + i := flag.String("i", "jpg", "変換の対象となる画像種別") + o := flag.String("o", "png", "変換後の画像種別") + flag.Parse() + + in = imgconv.ToImageType(*i) + out = imgconv.ToImageType(*o) + if in == imgconv.Unknown || out == imgconv.Unknown { + in = imgconv.Unknown + out = imgconv.Unknown + err = fmt.Errorf("設定された画像種別が不正です") + return + } + + dir = *d + return +} + +func main() { + dir, inType, outType, err := parseArgs() + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + pathes, err := imgconv.ImageFilePathesRecursive(dir, inType) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + for _, path := range pathes { + m, err := imgconv.LoadImage(path) + if err != nil { + fmt.Fprintf(os.Stderr, "%s の読み込みに失敗しました。%v\n", path, err) + continue + } + + savePath := imgconv.ReplaceExt(path, outType) + if err := imgconv.SaveImage(m, outType, savePath); err != nil { + fmt.Fprintf(os.Stderr, "%s の保存に失敗しました。%v\n", savePath, err) + continue + } + } +} From 9e13eba8afc013240ce6f44adef1b9ea6e3c5b78 Mon Sep 17 00:00:00 2001 From: hiroygo Date: Sun, 12 Jul 2020 17:56:58 +0900 Subject: [PATCH 4/6] add readme --- kadai2/hiroygo/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 kadai2/hiroygo/README.md diff --git a/kadai2/hiroygo/README.md b/kadai2/hiroygo/README.md new file mode 100644 index 0000000..aff6fc8 --- /dev/null +++ b/kadai2/hiroygo/README.md @@ -0,0 +1,27 @@ +# 課題2 +## 【TRY】io.Readerとio.Writer +### io.Readerとio.Writerについて調べてみよう +#### 標準パッケージでどのように使われているか +* データの入出力処理を抽象化するために `io.Reader`, `io.Writer` は使われている +* `*os.File`, `*bytes.Buffer`, `net.Conn` などが `io.Reader`, `io.Writer` を実装している +* 利用例. `func json.NewEncoder(w io.Writer) *Encoder` + * この関数は json エンコーダを返す + * `Encoder` の `Encode` を実行すると、内部で `w.Write` を実行し、エンコード結果を `w` に出力する + +#### io.Readerとio.Writerがあることで、どういう利点があるのか具体例を挙げて考えてみる +* 上記利用例のように `func json.NewEncoder(w io.Writer) *Encoder` の `w` には `*os.File`, `*bytes.Buffer` など様々なものを入れることができる +* `w` は `io.Writer` を実装さえしていればよく、`Encoder` が `w` の内部実装まで考える必要がない +* 新しく型を追加してもそれが、`io.Writer` を実装していれば `Encode` を実行できる。`Encoder` 側の修正は必要ない + +## 【TRY】テストを書いてみよう +### 1回目の課題のテストを作ってみて下さい +* テストのしやすさを考えてリファクタリングしてみる +* テストのカバレッジを取ってみる +* テーブル駆動テストを行う +* テストヘルパーを作ってみる + +### テストのカバレッジ +``` +$ go test -coverprofile=profile github.com/gopherdojo/dojo8/kadai2/hiroygo/imgconv +ok github.com/gopherdojo/dojo8/kadai2/hiroygo/imgconv 0.497s coverage: 88.1% of statements +``` From 315128574be73e2ab1fa84e5efc5fb48c8d232d4 Mon Sep 17 00:00:00 2001 From: hiroygo Date: Sun, 12 Jul 2020 18:18:20 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix=20Errorf=20=E3=81=AF=E4=B8=8D=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kadai2/hiroygo/imgconv/imgconv.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kadai2/hiroygo/imgconv/imgconv.go b/kadai2/hiroygo/imgconv/imgconv.go index dc3be28..a03b241 100644 --- a/kadai2/hiroygo/imgconv/imgconv.go +++ b/kadai2/hiroygo/imgconv/imgconv.go @@ -1,6 +1,7 @@ package imgconv import ( + "errors" "fmt" "image" "image/gif" @@ -113,7 +114,7 @@ func ReplaceExt(path string, replace ImageType) string { // SaveImage Image を指定された画像形式で保存する func SaveImage(m image.Image, out ImageType, savePath string) (rerr error) { if m == nil { - return fmt.Errorf("Image が nil です") + return errors.New("Image が nil です") } var encoder func(*os.File, image.Image) error From 0dc76515f18e404438f0a5a9ee524382103d0bac Mon Sep 17 00:00:00 2001 From: hiroygo Date: Sat, 18 Jul 2020 09:42:54 +0900 Subject: [PATCH 6/6] =?UTF-8?q?fix=20=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E4=B8=A6=E5=88=97=E5=8C=96=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kadai2/hiroygo/imgconv/imgconv_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kadai2/hiroygo/imgconv/imgconv_test.go b/kadai2/hiroygo/imgconv/imgconv_test.go index a3f14ab..7f0f12e 100644 --- a/kadai2/hiroygo/imgconv/imgconv_test.go +++ b/kadai2/hiroygo/imgconv/imgconv_test.go @@ -36,7 +36,9 @@ func TestToImageType(t *testing.T) { } for _, c := range cases { + c := c t.Run(c.name, func(t *testing.T) { + t.Parallel() if actual := imgconv.ToImageType(c.input); actual != c.expected { t.Errorf("want ToImageType(%s) = %v, got %v", c.input, c.expected, actual) } @@ -59,7 +61,9 @@ func TestImageFilePathesRecursive(t *testing.T) { } for _, c := range cases { + c := c t.Run(c.name, func(t *testing.T) { + t.Parallel() actual, err := imgconv.ImageFilePathesRecursive(c.dir, c.imgType) if err != nil { t.Fatalf("ImageFilePathesRecursive(%s, %v) error %v", c.dir, c.imgType, err) @@ -90,7 +94,9 @@ func TestLoadImage(t *testing.T) { } for _, c := range cases { + c := c t.Run(c.name, func(t *testing.T) { + t.Parallel() _, err := imgconv.LoadImage(c.path) if !c.wantErr && err != nil { t.Errorf("LoadImage(%s) error %v", c.path, err) @@ -120,7 +126,9 @@ func TestReplaceExt(t *testing.T) { } for _, c := range cases { + c := c t.Run(c.name, func(t *testing.T) { + t.Parallel() actual := imgconv.ReplaceExt(c.path, c.outType) if actual != c.expected { t.Errorf("want ReplaceExt(%s, %v) = %s, got %s", c.path, c.outType, c.expected, actual)