ImageMagickのconvertで”DestroyQuantumInfo: アサーション `quantum_info != (QuantumInfo *) NULL’ に失敗しました”が出たときの対処法

エラーが出た状況

私はUbuntu 18.04で以下のバージョンのImageMagickを使っているときにエラーがでました。

縦長の画像をいくつかに切り分けるために、convertコマンドを実行すると以下のエラーが出ました。

対処法

結論は/etc/ImageMagick-6/policy.xmlのresourceのwidthとheightの上限値を変更します。

githubのissueに解決策が書かれていました。policy.xmlの中に読み込む画像のwidthとheightをpixelで指定する箇所があり、それを処理したい画像以上の大きさにすることでエラーが吐き出されることなく、うまく動きました。

sudoで/etc/ImageMagick-6/policy.xmlを開くと、50行目あたりに読み込む画像のheightとwidthの上限値を指定する箇所があります。私の場合は処理したい画像の高さが25000pxだったので、もともと16KPになっていたところをコメントアウトして、32KPにすることで処理することができました。

$ sudo vim /etc/ImageMagick-6/policy.xml
<!-- 省略 -->
<policymap>
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <policy domain="resource" name="memory" value="256MiB"/>
  <policy domain="resource" name="map" value="512MiB"/>
  <!-- <policy domain="resource" name="width" value="16KP"/> -->
  <!-- <policy domain="resource" name="height" value="16KP"/> -->
  <policy domain="resource" name="width" value="32KP"/>
  <policy domain="resource" name="height" value="32KP"/>
  <policy domain="resource" name="area" value="128MB"/>
  <policy domain="resource" name="disk" value="1GiB"/>
  <!-- 省略 -->

参照情報

Convert crashing – ImageMagick6 github issue

クックパッド開発者ブログ – ImageMagickのピクセルキャッシュとリソース制限

ImageMagick Security Policy