プログラムによる画像操作(特にPHPで)を行ったことがある場合は、おそらくImageMagickライブラリまたはその主要なフォークであるGraphicsMagickに遭遇したことがあります。 mogrifyconvertなどのライブラリが提供する実行可能ファイルのおかげで、多くの一般的なプログラミング言語の機能を活用できるだけでなく、コマンドラインから直接使用することもできます。

入門

ImageMagickライブラリは非常に人気がありますが、通常はデフォルトでインストールされていません。 人気があるので、お気に入りのパッケージマネージャー(aptbrewなど)からインストールできるはずです。

インストールの詳細については、ImageMagickコードリポジトリで入手可能なInstall-*.txtファイルを確認してください。

作業に便利な画像(JPG、PNGなど)がすでにあると仮定します。 そうでない場合は、 multicolor.io にアクセスして、そこから1〜2枚の画像を取得する必要があります。

アスペクト比を無視して、特定の寸法にサイズ変更します

アスペクト比を維持せずに特定の寸法にサイズ変更することは、望ましいことではない傾向があります。 元のアスペクト比がすでに1:1にかなり近い場合を除いて、画像は歪んで見えることになります。

とは言うものの、この方法でサイズを変更する方法を知っておくのは良いことです。そのため、深夜にコマンドをパンチインするときに避けるべきことを知っています。

元の画像のアスペクト比を維持せずに画像のサイズを特定の寸法に変更するには、寸法の最後に強打!を含めます。

$ convert original.png -resize 100x100! new.png

特定の寸法にサイズ変更し、アスペクト比を維持します

アスペクト比を維持するには、単に強打を省略します。

$ convert original.png -resize 100x100 new.png

これは、実際には画像を指定された正確なサイズにサイズ変更しません。 それらの寸法に収まるように画像のサイズを変更します。

反対に、寸法に^を追加して、画像のサイズを寸法に合わせてサイズを変更し、片側で重なる可能性があることをImageMagickに通知できます。

2つの寸法(幅または高さ)の一方は正確に拡大縮小され、もう一方は比例して拡大縮小され、重なる場合があります。

$ convert original.png -resize 100x100^ new.png

特定の寸法にサイズ変更し、アスペクト比を維持します

画像のサイズを変更して領域を塗りつぶしたり、アスペクト比を維持したりするだけでなく、重複しないようにトリミングしたい場合もあります。 このための良いユースケースは、ユーザーアバターです。 明らかに、ユーザーのプロフィール写真を伸ばしたり押しつぶしたりしたくないので、正方形に切り抜くことは問題のない解決策です。

$ convert original.png -resize 100x100^ -gravity center -extent 100x100 new.png

アップロードした画像の領域をアバターとして選択できるようになったため、ユーザーは「大丈夫」だと思います。そのため、画像の中央に切り抜きを入れたいと仮定すると、多少の混乱が生じる可能性があります。

また、必要に応じて、重力を調整して異なる位置に合わせることができます。また、拡大縮小された寸法と正確に一致しないサイズをトリミングすることもできます。

適切なファイルのサイズ変更

これまで、ファイルを変換して新しいファイルに保存してきました。 より安全なオプションですが、元のファイルを破壊しないため、必ずしも望ましいワークフローとは限りません。

ファイルをその場で編集したい場合は、convertコマンドをmogrifyと交換できます。 mogrifyコマンドは、その場で変更される入力ファイルを受け入れます。

サイズ変更の結果に満足できない場合に備えて、サイズ変更する画像のバックアップを作成することを強くお勧めします

前のコマンドの「mogrifyed」バージョンは次のとおりです。

$ mogrify -resize 100x100 original.png

複数のファイルのサイズ変更

さらに一歩進んで、画像のディレクトリ全体を編集し、すべて同じ方法でサイズを変更したい場合は、mogrifyワイルドカード文字列を渡すことができます。

$ mogrify -resize 100x100! ./some/path/*.png
$ mogrify -resize 100x100^ -gravity center -extent 100x100 *.png

結論

コマンドラインからの画像のサイズ変更は、実際には氷山の一角にすぎません。 ImageMagickは、画像の最適化、色の操作、さらにはピクセル化を可能にする多数の追加オプションをサポートしています。

コマンドライン画像編集とgitの機能を組み合わせて、pre-commitフックの一部として画像を自動的に拡大縮小および最適化することもできます。