ImageMagick」タグアーカイブ

convertを使った画像の拡大縮小

アスペクト比を維持してリサイズ

ImageMagickではデフォルトでアスペクト比を維持するようになっていますので、何もしなければアスペクト比が維持されます。

横を300px、縦はアスペクト比が変わらないようにリサイズ

$ convert -resize 300x infile.jpg outfile.jpg

縦を200px、横はアスペクト比が変わらないようにリサイズ

$ convert -resize x200 infile.jpg outfile.jpg

アスペクト比を維持して横300px、縦200px以下のサイズにリサイズ

$ convert -resize 300x200 infile.jpg outfile.jpg

アスペクト比を維持して横300、縦200以上のサイズにリサイズ

$ convert -resize 300x200^ infile.jpg outfile.jpg

アスペクト比を無視してリサイズ

アスペクト比を無視したい場合は!フラグを使います。

アプペクト比を無視して横300px、縦200pxにリサイズ

$ convert -resize 300x200! infile.jpg outfile.jpg

備考

ファイルを上書きでサイズ変更したい場合はmodifyコマンドを使います。

$ mogrify -resize 300x200 file.jpg

画像をクロップ(トリミング)したい場合はcropコマンドを使います。

$ convert -gravity Center -crop 300x200+0+0 infile.png outfile.png

※切り取る位置を変更したい場合はCenterの代わりにNorth/South/East/Westなども使えます。

リンク

Resizing or Scaling — IM v6 Examples
https://legacy.imagemagick.org/Usage/resize/

Cutting and Bordering — IM v6 Examples
https://legacy.imagemagick.org/Usage/crop/

Magick++ライブラリ

Magick++はC++言語で使える画像処理ライブラリです。ImageMagickでできるような画像処理を自分のプログラムに組み込むことができます。

ヘッダーファイルの読み込み

#include <Magick++.h>

ライブラリの初期化

Magick::Image image(*argv);

画像処理

ファイルを読み込む

Magick::Image image("example.jpg");

2値化

image.type(Magick::BilevelType);

処理後の画像を保存

image.write("magick++.jpg");

画像を2値化するサンプルコード

#include <Magick++.h> 
#include <iostream> 

int main(int ac, char **av)
{
  Magick::InitializeMagick(*av);

  try{
    Magick::Image image(av[1]);
    image.type(Magick::BilevelType);
    image.write("magick++.jpg");
  }
  catch(Magick::Exception &error_){
    std::cout << "exception: " << error_.what() << std::endl;
  } 

  return 0; 
}

コンパイルとリンク

ヘルパースクリプトMagick++-configを使うとヘッダーのパスやリンクオプションを自動で指定できます。

c++ magick++.cc `Magick++-config --cppflags --cxxflags --ldflags --libs`

2値化した画像の例