@@ 62,6 62,15 @@ func Image2ASCIIString(image image.Image, options *Options) string {
return buffer.String()
}
+// ImageFile2ASCIIMatrix converts a image file to ascii matrix
+func ImageFile2ASCIIMatrix(imageFilename string, option *Options) []string {
+ img, err := OpenImageFile(imageFilename)
+ if err != nil {
+ log.Fatal("open image failed : " + err.Error())
+ }
+ return Image2ASCIIMatrix(img, option)
+}
+
// ImageFile2ASCIIString converts a image file to ascii string
func ImageFile2ASCIIString(imageFilename string, option *Options) string {
img, err := OpenImageFile(imageFilename)
@@ 75,7 84,7 @@ func ImageFile2ASCIIString(imageFilename string, option *Options) string {
func OpenImageFile(imageFilename string) (image.Image, error) {
f, err := os.Open(imageFilename)
if err != nil {
- log.Fatal(err)
+ return nil, err
}
img, _, err := image.Decode(f)
@@ 0,0 1,94 @@
+package convert
+
+import (
+ "github.com/stretchr/testify/assert"
+ "reflect"
+ "testing"
+)
+
+// TestOpenImageFile test open different type image file
+func TestOpenImageFile(t *testing.T) {
+ assertions := assert.New(t)
+ jpgFilename := "testdata/jpg_sample_image.jpg"
+ openedImage, err := OpenImageFile(jpgFilename)
+ assertions.True(err == nil, "jpg image format should be supported")
+ assertions.True(openedImage != nil, "opened jpg file should not be nil")
+
+ pngFilename := "testdata/png_sample_image.png"
+ openedImage, err = OpenImageFile(pngFilename)
+ assertions.True(err == nil, "png image format should be supported")
+ assertions.True(openedImage != nil, "opened jpg file should not be nil")
+
+ notSupported := "testdata/not_supported_sample_image"
+ openedImage, err = OpenImageFile(notSupported)
+ assertions.True(err != nil, "should not open unsupported image")
+ assertions.True(openedImage == nil, "not supported image should be nil")
+}
+
+// TestOpenNotExistsFile test open a not exists file
+func TestOpenNotExistsFile(t *testing.T) {
+ assertions := assert.New(t)
+ _, err := OpenImageFile("not exists")
+ assertions.True(err != nil)
+}
+
+// TestImage2ASCIIMatrix test convert a image to ascii matrix
+func TestImage2ASCIIMatrix(t *testing.T) {
+ imageTests := []struct {
+ imageFilename string
+ asciiMatrix []string
+ }{
+ {"testdata/3x3_black.png", []string{
+ " ", " ", " ", "\n",
+ " ", " ", " ", "\n",
+ " ", " ", " ", "\n"}},
+ {"testdata/3x3_white.png", []string{
+ "@", "@", "@", "\n",
+ "@", "@", "@", "\n",
+ "@", "@", "@", "\n"}},
+ {"testdata/8x3_multi_colors.png", []string{
+ "L", "0", "L", "t", "0", "t", "G", "0", "\n",
+ "i", "L", "t", "1", "L", "1", "f", "L", "\n",
+ "i", "f", "i", "i", ";", "L", ";", "t", "\n",
+ }},
+ }
+
+ for _, tt := range imageTests {
+ t.Run(tt.imageFilename, func(t *testing.T) {
+ convertOptions := defaultOptions
+ convertOptions.FitScreen = false
+ convertOptions.Colored = false
+
+ matrix := ImageFile2ASCIIMatrix(tt.imageFilename, &convertOptions)
+ if !reflect.DeepEqual(matrix, tt.asciiMatrix) {
+ t.Errorf("image %s convert expected to %+v, but get %+v",
+ tt.imageFilename, tt.asciiMatrix, matrix)
+ }
+ })
+ }
+}
+
+func TestImageFile2ASCIIString(t *testing.T) {
+ imageTests := []struct {
+ imageFilename string
+ asciiString string
+ }{
+ {"testdata/3x3_black.png", " \n \n \n"},
+ {"testdata/3x3_white.png", "@@@\n@@@\n@@@\n"},
+ {"testdata/8x3_multi_colors.png", "L0Lt0tG0\niLt1L1fL\nifii;L;t\n"},
+ }
+
+ for _, tt := range imageTests {
+ t.Run(tt.imageFilename, func(t *testing.T) {
+ convertOptions := defaultOptions
+ convertOptions.FitScreen = false
+ convertOptions.Colored = false
+
+ charString := ImageFile2ASCIIString(tt.imageFilename, &convertOptions)
+ if charString != tt.asciiString {
+ t.Errorf("image %s convert expected to %+v, but get %+v",
+ tt.imageFilename, tt.asciiString, charString)
+ }
+ })
+ }
+}
@@ 23,25 23,6 @@ func TestGetTerminalScreenSize(t *testing.T) {
}
}
-// TestOpenImageFile test open different type image file
-func TestOpenImageFile(t *testing.T) {
- assertions := assert.New(t)
- jpgFilename := "testdata/jpg_sample_image.jpg"
- openedImage, err := OpenImageFile(jpgFilename)
- assertions.True(err == nil, "jpg image format should be supported")
- assertions.True(openedImage != nil, "opened jpg file should not be nil")
-
- pngFilename := "testdata/png_sample_image.png"
- openedImage, err = OpenImageFile(pngFilename)
- assertions.True(err == nil, "png image format should be supported")
- assertions.True(openedImage != nil, "opened jpg file should not be nil")
-
- notSupported := "testdata/not_supported_sample_image"
- openedImage, err = OpenImageFile(notSupported)
- assertions.True(err != nil, "should not open unsupported image")
- assertions.True(openedImage == nil, "not supported image should be nil")
-}
-
// TestScaleImageWithFixedHeight test scale the image by fixed height
func TestScaleImageWithFixedHeight(t *testing.T) {
assertions := assert.New(t)