ImageMagick-6.8.6-10 差分

ImageMagick-6.8.6-9 差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.8.6-10.

まとめ

  • SVG, MSL の初期化が何度でも動く問題 (複数スレッドで動かすとクラッシュしてた)
  • 16bit PSD 画像で 257個以上の色を使うとクラッシュする問題の対処
  • RGF (LEGO Mindstorms EV3 Robot Graphics File) 対応
  • DDS (DirectDraw Surface) 対応
  • libMagick++ の so 番号を 2 から 3 に更新 (ABI互換性が無くなった?)
  • RGB 空間と互換と判断する色空間が増えてる。(IssRGBCompatibleColorspace)
  • その他諸々

差分

- #if !GLIB_CHECK_VERSION(2,5,0)
+ #if !GLIB_CHECK_VERSION(2,35,0)
   g_type_init();
   #endif
ChangeLog にない物
  • CoderInfo クラスの拡張
    • mimeType 文字列追加
    • isMultiFrame メソッド追加
  • libMagick++ の so 番号を 2 から 3 に更新 (map ファイルが VER2 から VER3 になってる)
  • ColorCompliance 周りがかなり変わっている。(詳細は追ってない)
  • config.guess の case から plan9 が消えてるけど、これはデフォルトで処理出来るって事?
  • AccelerateConvolveImage に MagickExport も拡張子が付いた。(API で使えるようになった?)
  • magick/identity に PrintChannelLocations 追加 (チャネル毎に最大/平均/最小の値を持つピクセルの位置を x, y でダンプする機能っぽい)
  • RGB 空間の判断が少し広くなってる。(今回導入された DDS coder で IssRGBCompatibleColorspace を使ってて、他もそれに習った感じ)
static inline MagickBooleanType IssRGBColorspace(
  const ColorspaceType colorspace)
{
  if ((colorspace == sRGBColorspace) || (colorspace == TransparentColorspace))
    return(MagickTrue);
  return(MagickFalse);
}

static inline MagickBooleanType IssRGBCompatibleColorspace(
  const ColorspaceType colorspace)
{
  if ((colorspace == sRGBColorspace) || (colorspace == RGBColorspace) ||
      (colorspace == scRGBColorspace) ||
      (colorspace == TransparentColorspace) ||
      (IsGrayColorspace(colorspace) != MagickFalse))
    return(MagickTrue);
  return(MagickFalse);
}
  • tiff で少し気になるコード変更
diff -rw ImageMagick-6.8.6-9/coders/tiff.c ImageMagick-6.8.6-10/coders/tiff.c
3070,3073c3070
<     rows_per_strip=1;
<     if (TIFFScanlineSize(tiff) != 0)
<       rows_per_strip=(uint32) MagickMax((size_t) TIFFDefaultStripSize(tiff,0),
<         1);
---
>     rows_per_strip=TIFFDefaultStripSize(tiff,0);
3182a3180,3183
>     if (rows_per_strip < 1)
>       rows_per_strip=1;
>     if ((image->rows/rows_per_strip) >= (1UL << 15))
>       rows_per_strip=(image->rows >> 15);
diff -rw ImageMagick-6.8.6-9/coders/tim.c ImageMagick-6.8.6-10/coders/tim.c
183a184
>     image->depth=8;
  • magick/fourier.c に意味不明なコードが
      /*
        Normalize inverse transform.
      */
      i=0L;
      gamma=PerceptibleReciprocal((double) fourier_info->width*
        fourier_info->height);
      for (y=0L; y < (ssize_t) fourier_info->height; y++)
        for (x=0L; x < (ssize_t) fourier_info->center; x++)
        {
#if defined(MAGICKCORE_HAVE_COMPLEX_H)
          forward_pixels[i]*=gamma;
#else
          forward_pixels[i][0]*=gamma;
          forward_pixels[i][1]*=gamma;
#endif
          i++;
        }
    • height*center を先に計算すれば1重ループに出来そうだけど。何か理由があるんだろうか。

ChangeLog

Added support for writing DDS files.
2013-08-29 6.8.6-10 Cristy <quetzlzacatenango@image...>
Call SVG / MSL xmlCleanupParser() / xmlInitParser() once (reference http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=23991).
Support LEGO Mindstorms EV3 Robot Graphics File format (contributed by bdwheele@ind.../
Since glib-2.35.0 g_type_init() was removed (reference https://bugs.gentoo.org/show_bug.cgi?id=481042).
New identify define to output the location of the minimum, maximum, or mean pixel of the image (e.g. identify -define identify:locate=maximum -define identify:limit=7 rose).
Column columns / rows no longer inverted for RGF image format (patch from Brian Wheeler <bdwheele@india...>.
16bit PSD images might have a 65536 colormap (reference http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=24102).
Ascii map is now declare as AsciiMap (reference http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=24106).
Return label for identify -format "%l" (reference http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=24105).

備考

By default we "ping" an image. That is, read certain meta information about the image and bail before we read the image pixels. This makes reading images very fast and consumes few resources. Unfortunately the label information is not available when pinging PNG images, thus the +ping requirement. This is specific to PNG which locates the label after the image pixels (DAT section).

+ping 指定すると IDAT(画像)チャンクまで読んだら後を切り捨てるので、その後ろに DAT セクションがあっても読まないので、ラベルが取れない事があるらしい。