Mercurial > mercurial > hgweb_golang.cgi
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 |
