2019-10-16 CentOS 6.9 | CentOS7.7 > ImageMagickの仕様変更 > 空白部分の自動クロップ(-trim)がデフォルトになったようだ | Versionの付け方 (メジャー、マイナー、リビジョン）| 実装:両OSで動くスクリプト

```txt:動作環境
CentOS release 6.9 (Final) 
ImageMagick
    - Version: ImageMagick 6.7.2-7 2017-03-22 Q16 http://www.imagemagick.org
CentOS Linux release 7.7.1908 (Core)
ImageMagick
    - Version: ImageMagick 6.7.8-9 2019-08-08 Q16 http://www.imagemagick.org
```

## 状況

CentOS 6.9からCentOS 7.7への移行を進めている。
ImageMagickのconvertコマンドの結果がおかしくなったため調べた。
PostScriptファイルからpngファイルへのコンバートで出力領域が異なる。

スクリプトは下記を使っていた。

```bash 
#!/usr/bin/env bash

fmt='s/\.ps/\.png/g'

for dd in $(ls *.ps);do
	newfile=$(echo $dd | sed $fmt)
#	convert -crop 430x360+50+350 $dd $newfile

	# remove background color
	convert -transparent "rgb(12,24,249)" -crop 430x360+50+350 $dd $newfile
	echo $newfile
#	break; # for debug
done
```

- CentOS 6.9: 430x360になる
    - Version: ImageMagick 6.7.2-7 2017-03-22 Q16 http://www.imagemagick.org
- CentOS 7.7: 430x190になる (下の部分しかない)
    - Version: ImageMagick 6.7.8-9 2019-08-08 Q16 http://www.imagemagick.org

## convertコマンドの比較

`-crop`オプションなしで変換した結果が以下となる。
PostScriptファイルには「空白部分がある」状態。

***Note: Gimpで非公開の情報を緑の四角形にて消している。色が違うのはGimpでの操作の違いによるもので、ここでの議題ではないことご了承ください。***

CentOS 6.9
![win_CentOS69.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/8aaa7443-9d38-a97c-d6de-bd9ebb5b2e4f.png)

CentOS 7.7
![win_CentOS77.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32870/4d8a58dd-a4b2-3883-a2fd-9915726b1854.png)

- CentOS 6.9: 空白含めて変換
- CentOS 7.7: 空白を除外して変換

### -trimオプション

Convertコマンドの-trimオプション

https://explainshell.com/explain?cmd=convert+-trim

CentOS 6.9: -trimなし
CentOS 7.7: -trimあり
の結果となっているようである。

### 対処案1 > 失敗

CentOS 6.9とCentOS 7.7にて同じ(bash)スクリプトで処理をするためには、下記が考えられる対処である。

- convertコマンドに対して「-trim」オプションを付ける 
- -trimオプション付きの出力に基づき、「-crop」の座標を指定するようにする

(追記 2019-10-16)
この方法ではうまく行かなかった。
空白の有無にもとづき、trimが効く範囲が異なる。

- CentOS 6.9: 空白領域をトリム
- CentOS 7.7: 背景領域をトリム


### Versionの付け方 (メジャー、マイナー、リビジョン）

- CentOS 6.9
    - Version: ImageMagick 6.7.2-7 2017-03-22 Q16 http://www.imagemagick.org
- CentOS 7.7
    - Version: ImageMagick 6.7.8-9 2019-08-08 Q16 http://www.imagemagick.org

いわゆる「リビジョン」という部分が「2-7」から「8-9」へ変更されている。
リビジョンの変更ではあるが、エンドユーザの後続処理系に影響を与えるような仕様変更をしている、と感じている。


### 対処案2 > 成功

CentOS 6.9, CentOS 7.7両方で動くスクリプトを用意した。
画像を空白領域で広げて、trimをすることで、両方のOSで動くようになると考えた。

```bash
#!/usr/bin/env bash

# Version history
#
# Oct. 16, 2019
#  - add [-trim] option
#	 Reason: to use both on CentOS 6.9 and CentOS 7.7. CentOS 6.9 do not use [-trim] by default
#  - change crop geometry
#    Reason: convert command atuomatically use [-trim] option by default on CentOS 7.7
#            On CentOS 6.9, [-trim] should be specified.

fmt='s/\.ps/\.png/g'

for dd in $(ls *.ps);do
	newfile=$(echo $dd | sed $fmt)
	workfile=work191016.png
#	convert -crop 430x360+50+350 $dd $newfile

	# 1. expand and trim 
	# Reason: different trim behavior for CentOS 6.9 and CentOS 7.7
	#    CentOS 6.9: do not trim background empty space by default
	#    CentOS 7.7: do trim background empty space by default (same as -trim option)
	# original size: 612x792
	# 630x800: larger than the original size 
	convert $dd -page -20-20 -background none -extent 630x800 $workfile
	convert -trim $workfile $workfile

	# 2. remove background color
	# 612 x 792 (with empty) => 540 x 540 (without empty)
	# Eq. 792 - 540  = 252 (with and without empty)
	# Eq. 350 - 252 = 98 (vertical shift)
	# +repage: without this, on CentOS 6.9 
	#    " convert: geometry does not contain image `work191016.png' @ warning/transform.c/CropImage/573."
	#convert -transparent "rgb(12,24,249)" -crop 430x360+50+350 $dd $newfile  
	convert +repage -transparent "rgb(12,24,249)" -crop 430x360+50+98 $workfile $newfile  # 2019-10-16
	rm -f $workfile
	echo $newfile
#	break; # for debug
done
```

これでCentOS 6.9で使っていた元のスクリプトと同一の結果が、CentOS 6.9とCentOS 7.7で得られるようになった。