comparison src/IMGmanip.go @ 6:9072560fc0f2

IMGmanip: new dump option.
author pyon@macmini
date Thu, 27 Oct 2016 20:42:11 +0900
parents de451fa0c9cd
children
comparison
equal deleted inserted replaced
5:e4066309b04f 6:9072560fc0f2
1 /* Image Manipulator - ver 0.2 ( Last Change: 2016-08-21 Sun 09:51:52.) */ 1 /* Image Manipulator - ver 0.3 ( Last Change: 2016-10-27 Thu 20:38:25.) */
2 package main 2 package main
3 3
4 import( 4 import(
5 "errors" 5 "errors"
6 "flag" 6 "flag"
13 "strings" 13 "strings"
14 "strconv" 14 "strconv"
15 ) 15 )
16 16
17 func main() { 17 func main() {
18 ver := "0.2" 18 ver := "0.3"
19 19
20 // arguments 20 // arguments
21 kind := flag.String( "t", "", "file type : jpeg / png" ) 21 kind := flag.String( "t", "", "file type : jpeg / png" )
22 resize := flag.String( "s", "", "new size : 600x800 / 320x0 / ..." ) 22 resize := flag.String( "s", "", "new size : 600x800 / 320x0 / ..." )
23 crop := flag.String( "c", "", "crop size : 300x200+10+35" ) 23 crop := flag.String( "c", "", "crop size : 300x200+10+35" )
24 angle := flag.Uint( "r", 0, "rotate : 90 / 180 / 270" ) 24 angle := flag.Uint( "r", 0, "rotate : 90 / 180 / 270" )
25 dump := flag.Bool( "d", false, "dump RGBA : [no argument]")
25 26
26 flag.Parse() 27 flag.Parse()
27 if flag.NFlag() == 0 { 28 if flag.NFlag() == 0 {
28 fmt.Fprintf( os.Stderr, "\n=== Image-Manipulator - version %s ===", ver ) 29 fmt.Fprintf( os.Stderr, "\n=== Image-Manipulator - version %s ===", ver )
29 fmt.Fprintf( os.Stderr, "\n$ imgmanip [option parameter] < infile > outfile\n" ) 30 fmt.Fprintf( os.Stderr, "\n$ imgmanip [option parameter] < infile > outfile\n" )
30 flag.PrintDefaults() 31 flag.PrintDefaults()
31 os.Exit( 1 ) 32 os.Exit( 1 )
32 } 33 }
33 34
34 // convert 35 switch {
35 if *kind != "" { 36 // convert
36 err := Convert( os.Stdin, os.Stdout, *kind ); if err != nil { 37 case *kind != "" :
37 fmt.Fprintf( os.Stderr, "%s: %v\n", *kind, err ) 38 err := Convert( os.Stdin, os.Stdout, *kind ); if err != nil {
38 os.Exit( 1 ) 39 fmt.Fprintf( os.Stderr, "%s: %v\n", *kind, err )
39 } 40 os.Exit( 1 )
40 return 41 }
41 } 42
42 43 // resize
43 // resize 44 case *resize != "" :
44 if *resize != "" { 45 err := Resize( os.Stdin, os.Stdout, *resize ); if err != nil {
45 err := Resize( os.Stdin, os.Stdout, *resize ); if err != nil { 46 fmt.Fprintf( os.Stderr, "resize: %v\n", err )
46 fmt.Fprintf( os.Stderr, "resize: %v\n", err ) 47 os.Exit( 1 )
47 os.Exit( 1 ) 48 }
48 } 49
49 return 50 // crop
50 } 51 case *crop != "" :
51 52 err := Crop( os.Stdin, os.Stdout, *crop ); if err != nil {
52 // crop 53 fmt.Fprintf( os.Stderr, "crop: %v\n", err )
53 if *crop != "" { 54 os.Exit( 1 )
54 err := Crop( os.Stdin, os.Stdout, *crop ); if err != nil { 55 }
55 fmt.Fprintf( os.Stderr, "crop: %v\n", err ) 56
56 os.Exit( 1 ) 57 // rotate
57 } 58 case *angle != 0 :
58 return 59 err := Rotate( os.Stdin, os.Stdout, *angle ); if err != nil {
59 } 60 fmt.Fprintf( os.Stderr, "rotate: %v\n", err )
60 61 os.Exit( 1 )
61 // rotate 62 }
62 if *angle != 0 { 63
63 err := Rotate( os.Stdin, os.Stdout, *angle ); if err != nil { 64 // dump
64 fmt.Fprintf( os.Stderr, "rotate: %v\n", err ) 65 case *dump :
65 os.Exit( 1 ) 66 err := Dump( os.Stdin ); if err != nil {
66 } 67 fmt.Fprintf( os.Stderr, "dump: %v\n", err )
67 return 68 os.Exit( 1 )
68 } 69 }
70
71
72 }
69 } 73 }
70 74
71 func Convert( in io.Reader, out io.Writer, kind string ) error { 75 func Convert( in io.Reader, out io.Writer, kind string ) error {
72 76
73 img, _, err := image.Decode( in ); if err != nil { 77 img, _, err := image.Decode( in ); if err != nil {
211 } 215 }
212 216
213 return errors.New( "image-type is not supported") 217 return errors.New( "image-type is not supported")
214 } 218 }
215 219
220 func Dump( in io.Reader ) error {
221 img, _, err := image.Decode( in ); if err != nil {
222 return err
223 }
224
225 bounds := img.Bounds()
226 for y:= bounds.Min.Y; y < bounds.Max.Y; y++ {
227 for x:= bounds.Min.X; x < bounds.Max.X; x++ {
228 r, g, b, a := img.At( x, y ).RGBA()
229 fmt.Printf( "(%d,%d) = %d,%d,%d,%d\n", x, y, r>>8, g>>8, b>>8, a>>8 )
230 }
231 }
232 return nil
233 }
234