はじめに
長方形の画像を正方形にする機会があったので、実現方法を残しておこうと思います。
今回はやりたいこととして、元の長方形の画像から縦横の比率を崩さず正方形にしたかった(強引にリサイズして正方形にはしたくなかった)ので、長方形の画像に余白を付け足すことで正方形にする方法を取りました。
また、正方形にすると同時に指定のサイズへ変換をかけたかったため、リサイズも行っています。
実現方法①(OpenCVを利用する)
OpenCVという画像処理系のライブラリを使用することで実現しました。(言語はJavaで実装)
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ImgConv {
static{
// DLLのロード
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
String img_in = "C:/hogehoge.jpg";
String img_out = "C:/fugafuga.jpg";
// 処理対象の画像を読み込む
Mat mat_in = Imgcodecs.imread(img_in);
Mat mat_out = new Mat();
// 上下に60pxずつ余白を追加し、RGBで色の指定を行う
Core.copyMakeBorder(mat_in,mat_out, 60, 60, 0, 0, Core.BORDER_CONSTANT,new Scalar(255,0,0));
// 300x300にリサイズする
Imgproc.resize(mat_out, mat_out, new Size(300,300));
// 処理した画像の出力
Imgcodecs.imwrite(img_out, mat_out);
}
}
実現方法②(ImageMagickを利用する)
ImageMagickを利用して実現しました。
今回はWindowsで正方形を作成しましたが、Linuxでも同様に可能です。
# Linuxの場合は先頭のmagickは不要
magick convert "hogehoge.jpg" -mattecolor "#fff" -frame 0x60 "fugafuga.jpg"
magick convert -resize 300x300 "fugafuga.jpg" "fugafuga.jpg"