ImageMagick-6.9.9-34差分
ImageMagick-6.9.9-33差分 - yoyaのメモの続き
The latest release of ImageMagick is version 6.9.9-34
- 7 系同時リリースは ImageMagick-7.0.7-22
※ HEIC(HEIF) 対応は ImageMagick-6.9.9-44 で libheif を使う形で一から作り直されてます。
まとめ
- HEIC 画像フォーマット読み込み対応 (HEIF コンテナに H.265/HEVC を入れた時の拡張子が HEIC)
- -crop 3:2 のようなアクペクト比指定をサポート。
- 沢山のメモリリーク修正
HEIC 対応ビルド
HEIC 内の H.265/HEVC Intra frame デコードで libde265 を利用します。
- libde265 ビルド
$ git clone https://github.com/strukturag/libde265 $ cd libde265 $ ./configure --disable-sherlock265 # sherlock265 は Qt ライブラリを必要とする為 $ make install
- ImageMagick ビルド
$ ./configure --prefix=<インストール先> --with-heic=yes % make install
- コンバート実行 (iPhone X の標準カメラで生成した HEIC ファイル)
% ~/ImageMagick/6.9.9-34/bin/convert IMG_0085.HEIC output.jpg % identify output.jpg output.jpg JPEG 4032x3024 4032x3024+0+0 8-bit sRGB 1.65668MiB 0.000u 0:00.000
この画像は HEIF のタイリング機能を使ってて、つまり READ 時にちゃんとグリッド展開してるって事。やりおる。。
しかし、iPhone から吸い出した HEIC コンテナ構造決め打ちで作ってるみたいで、それ以外は駄目。
% cd git/nokiatech/heif_conformance/conformance_files % ~/ImageMagick/6.9.9-34/bin/convert C001.heic t.png convert: Bad image: "only base_offset_size=0 and index_size=0 are supported" `ParseIlocAtom': No such file or directory @ error/heic.c/ParseIlocAtom/565. convert: Bad image: "atom parsing failed" `ParseAtom': No such file or directory @ error/heic.c/ParseAtom/693. convert: Bad image: "item id is incorrect" `ParseInfeAtom': No such file or directory @ error/heic.c/ParseInfeAtom/488. convert: Bad image: "atom parsing failed" `ParseAtom': No such file or directory @ error/heic.c/ParseAtom/693. convert: Bad image: "item id is incorrect" `ParseIpmaAtom': No such file or directory @ error/heic.c/ParseIpmaAtom/526. convert: Bad image: "atom parsing failed" `ParseAtom': No such file or directory @ error/heic.c/ParseAtom/693. convert: Unable to decode image grid `ReadHEIC': No such file or directory @ error/heic.c/ReadHEICImage/1146. convert: no images defined `t.png' @ error/convert.c/ConvertImageCommand/3258. %
GPAC の comformance test も駄目です。base_offset_size=4 とかなので。
<上記のと似たようなエラーなので略>
あと些細(?)な事ですが、identify 対応をど忘れしてる模様。
% ~/ImageMagick/6.9.9-34/bin/identify IMG_0085.HEIC %
Aspect ratio crop geometry
% ~/ImageMagick/6.9.9-34/bin/convert CmXJAiKVIAARbpd.png -crop 3:1 out.png
差分
- アスペクト比 geometry のサポート。例) -crop 3:2.
- HEIC 画像フォーマットの読み込みサポート
- https://github.com/ImageMagick/ImageMagick/issues/507
- coders/heic.c
> % Anton Kortunov %
> % Copyright 2017-2018 YANDEX LLC.
coders/cin.c 449a450 > ResetMagickMemory(&cin,0,sizeof(cin));
- coders/dcm.c
3566a3567,3568 > if (graymap != (int *) NULL) > graymap=(int *) RelinquishMagickMemory(graymap); 3872a3875,3878 > if (stream_info->offsets != (ssize_t *) NULL) > stream_info->offsets=(ssize_t *) > RelinquishMagickMemory(stream_info->offsets); 4009a4027,4032 > { > if (stream_info->offsets != (ssize_t *) NULL) > stream_info->offsets=(ssize_t *) > RelinquishMagickMemory(stream_info->offsets); > if (info.scale != (Quantum *) NULL) > info.scale=(Quantum *) RelinquishMagickMemory(info.scale);
- coders/mat.c, (他沢山)
564c564 < *Size -= magick_size; --- > *Size -= (unsigned int) magick_size; 784,789d783 < rotate_image=RotateImage(image,90.0,exception); < if (rotate_image != (Image *) NULL) < { < image=DestroyImage(image); < image=rotate_image; < }
- coders/fits.c
396a397,399 > { > if (comment != (char *) NULL) > comment=DestroyString(comment);
ChangeLogにない差分
- /PerlMagick/quantum/quantum.xs
- struct Methods の Arguments の初期化。(global な static 変数なので NULL が入るはずだけど、明示的に)
static struct Methods { const char *name; Arguments arguments[MaxArguments]; } Methods[] = 144a145 > NullReference = 0, 226c227 < { "Despeckle", }, --- > { "Despeckle", { { (const char *) NULL, NullReference } } },
- README.txt
- JPEG-2000 を消して HEIC に。あれ?消すの?
5c5 < 200) including PNG, JPEG, JPEG-2000, GIF, TIFF, DPX, EXR, WebP, Postscript, --- > 200) including PNG, JPEG, GIF, HEIC, TIFF, DPX, EXR, WebP, Postscript,
- coders/bmp.c
- 異常系チェック沢山
1064a1065 > { 1065a1067,1069 > if (shift.red > 32U) > break; > } <以下同様> /* Initialize BMP raster file header. */ 1648a1681 > if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse) (void) TransformImageColorspace(image,sRGBColorspace);
- coders/dcm.c
3310c3310 < if ((unsigned int) ((group << 16) | element) == 0xFFFEE0DD) --- > if ((((unsigned int) group << 16) | element) == 0xFFFEE0DD) 3908c3914,3921 < (void) ReadBlobByte(image); --- > { > int > c; > > c=ReadBlobByte(image); > if (c == EOF) > break; > } 3922a3936 > { 3923a3938,3940 > if (EOFBlob(image) != MagickFalse) > break; > }
- coders/dpx.c
816c816,817 < if (dpx.image.number_elements > MaxNumberImageElements) --- > if ((dpx.image.number_elements < 1) || > (dpx.image.number_elements > MaxNumberImageElements)) 1172c1173 < if (image->depth > 32) --- > if ((image->depth == 0) || (image->depth > 32))
- coders/gif.c
228a229,232 > (void) ResetMagickMemory(lzw_info->table[0],0,MaximumLZWCode* > sizeof(**lzw_info->table)); > (void) ResetMagickMemory(lzw_info->table[1],0,MaximumLZWCode* > sizeof(**lzw_info->table));
ChangeLog
2018-01-22 6.9.9-34 Cristy <quetzlzacatenango@image...> * Release ImageMagick version 6.9.9-34, GIT revision 12574:5370ede60:20180122. 2018-01-06 6.9.9-34 Cristy <quetzlzacatenango@image...> * Support aspect ratio geometry, e.g. -crop 3:2. * Add support for reading the HEIC image format (reference https://github.com/ImageMagick/ImageMagick/issues/507). * Fix IM build when HEIC is enabled. * Fixed numerous memory leaks, credit to OSS Fuzz.