0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

goで画像のトリム処理を行う

Last updated at Posted at 2022-06-24

はじめに

こんにちは、icemint0828です。
今回は自作パッケージの紹介も兼ねて、goでの画像のトリム処理の方法を紹介します。

動作環境

go 1.18.3

使用パッケージ

  • icemint0828/imgedit
    画像のトリム処理に使用しています。
    画像ファイルの拡張子の変換にも使用しています。

インストール

$  go get github.com/icemint0828/imgedit@v1.5.0

画像のトリム処理

main.go
package main

import (
	"github.com/icemint0828/imgedit"
)

func main() {
	// 切り取り開始位置の指定(px)
	left, top := 100, 100	

	// サイズの指定(px)
	width, height := 400, 400

	// FileConverter
	fc, _, err := imgedit.NewFileConverter("srcImage.png")
	if err != nil {
		panic(err)
	}
	// トリム
	fc.Trim(left, top, width, height)
	
	// 保存(jpeg, gif形式での保存も可能)
	err = fc.SaveAs("dstImage.png", imgedit.Png)
	if err != nil {
		panic(err)
	}
}

切り取り開始位置は画像の左上の位置を指定して下さい。
元画像の範囲外を選択すると、正常にトリム処理が出来ません。
サイズの指定は切り出したい画像のサイズを指定して下さい。

fc.SaveAsの第二引数では以下の形式で保存するファイルの形式を選択出来ます。

  • imgedit.Png
  • imgedit.Jpeg
  • imgedit.Gif

画像のトリム処理(image取得)

main.go
package main

import (
	"image"

	"github.com/icemint0828/imgedit"
)

func main() {
	// 切り取り開始位置の指定(px)
	left, top := 100, 100	

	// サイズの指定(px)
	width, height := 400, 400

	// srcImgを何らかの方法で取得
	var srcImg image.Image

	// FileConverter
	c := imgedit.NewConverter(srcImg)

	// トリム
	c.Trim(left, top, width, height)
	dstImg := c.Convert()

	// dstImgを使用
}

ファイルを介さずにimageを処理したい場合は、上記のようにimgedit.NewConverterで直接画像の加工が出来ます。

パッケージ内の処理の説明

imgeditパッケージ内のconverter.goでトリム処理を実施しています。

converter.go
// Trim trim the image to the specified size
func (c *converter) Trim(left, top, width, height int) {
	dst := image.NewRGBA(image.Rect(0, 0, width, height))
	dstSize := dst.Bounds().Size()
	for x := 0; x < dstSize.X; x++ {
		for y := 0; y < dstSize.Y; y++ {
			srcX, srcY := x+left, y+top
			dst.Set(x, y, c.Image.At(srcX, srcY))
		}
	}
	c.Image = dst
}

引数からサイズを取得し、*image.RGBAに対して、各ピクセルの色情報の書き込みしています。
書き込みをする際に元画像のx+left, y+topを参照することで左方向・上方向の切り抜きを実施し、その位置からのwidth, heightを取ることで右方向・下方向の切り抜きを実施しています。

おわりに

簡単な内容とはなりますが、画像のトリム処理を紹介させて頂きました。
最後まで読んで頂き、ありがとうございました。

前の記事

goで画像のリサイズ処理を行う

次の記事

goで画像の反転処理を行う

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?