Go言語 画像ファイルのテキスト化

     
 
//-------------------------------------------------------------------------
// 画像ファイルのテキスト化
//-------------------------------------------------------------------------
package main

//-------------------------------------------------------------------------
import (
  "fmt"
  "image"
  _ "image/gif"
  _ "image/jpeg"
  _ "image/png"
  "os"
  "strings"
  "time"
)

//-------------------------------------------------------------------------
// メイン
//-------------------------------------------------------------------------
func main() {

  start := time.Now()
  fn := "test.png"
  fp, er := os.Open(fn)

  if er != nil {
    fmt.Println("error:It isn't ", fn)
    return
  }
  defer fp.Close()


  //画像ファイルを取得
  img, fm, err := image.Decode(fp)
  if err != nil {
    fmt.Println(err)
    return
  }

  //フォーマット名表示
  fmt.Println("画像フォーマット:" , fm)

  //サイズ表示
  rc := img.Bounds()
  fmt.Println("横幅=", rc.Max.X, " 縦幅=", rc.Max.Y)

  //画像をテキストファイル化
  Txt(img, Ecng(fn, ".txt"))

  end := time.Now()
  fmt.Println("time: ", end.Sub(start))
}

//-------------------------------------------------------------------------
// テキストファイル作成
//-------------------------------------------------------------------------
func Txt(img image.Image, fn string) int {

  fp, er := os.Create(fn)
  if er != nil {
    fmt.Println("error:It isn't ", fn)
    return -1
  }

  rc := img.Bounds()
  for y := 0; y < rc.Max.Y; y++ {
    iw := make([]int, rc.Max.X)
    for x := 0; x < rc.Max.X; x++ {
      r, g, b, _ := img.At(x, y).RGBA()
      if r+g+b == 0 {
        iw[x] = 1
      }
    }
    var sw string
    for _, v := range iw {
      if v == 1 {
        sw += "*"
      } else {
        sw += " "
      }
    }
    sw += "\n"
    _, er := fp.Write([]byte(sw))
    if er != nil {
      fmt.Println("error:can't write ", fn)
      return -1
    }
  }
  fp.Close()
  fmt.Println("File:", fn)
  return 0
}

//-----------------------------------------------------------------
// ファイル名 拡張子の変更
//-----------------------------------------------------------------
func Ecng(fn string, ex string) string {
  ps := strings.LastIndex(fn, ".")
  fw := fn[0:ps] + ex
  return fw
}

//-------------------------------------------------------------------------
 
     


                     もどる