ImageMagick-6.9.0-6差分

ImageMagick-6.9.0-5差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.0-6

まとめ

差分

  • coders/png.c の MNG reader の未初期化で使われてない "p++" を削除
  • coders/png. WriteJNGImage(). で length を初期化
  • coders/png.c の MNG reader にあった signed/unsigned のミスマッチを修正
ChangeLogにない差分
  • coders/gif.c
    • 一般的な色プロファイルのどれでもない場合に独自にガンマ値を設定するが、メタ情報のプロファイルでなく画像自体のガンマ値を変えてた。
                if (i8bim != MagickFalse)
                  (void) CopyMagickString(name,"8bim",sizeof(name));
                else if (icc != MagickFalse)
                  (void) CopyMagickString(name,"icc",sizeof(name));
		else if (iptc != MagickFalse)
                  (void) CopyMagickString(name,"iptc",sizeof(name));
                else if (magick != MagickFalse)
                  {
                    (void) CopyMagickString(name,"magick",sizeof(name));
<                    image->gamma=StringToDouble((char *) info+6,(char **) NULL)\
>                    meta_image->gamma=StringToDouble((char *) info+6,(char **) NULL)\
;
    • 透明度設定時にカラーパレットに落とすが、元からパレット形式で256色以下の時は処理しないようにした
        /*
          Identify transparent colormap index.
        */
>        if ((image->storage_class == DirectClass) || (image->colors > 256))
          (void) SetImageType(image,PaletteBilevelMatteType);
    • 一番透明度合いの高いものを透明度インデックスにするが、fabs(絶対値) で差を計算するようにした。
        for (i=0; i < (ssize_t) image->colors; i++)
          if (image->colormap[i].opacity != OpaqueOpacity)
            {
              if (opacity < 0)
                {
                  opacity=i;
                  continue;
                }
<              alpha=(MagickRealType) TransparentOpacity-(MagickRealType)
<                image->colormap[i].opacity;
<              beta=(MagickRealType) TransparentOpacity-(MagickRealType)
<                image->colormap[opacity].opacity;
>              alpha=fabs((double) image->colormap[i].opacity-
>               TransparentOpacity);
>             beta=fabs((double) image->colormap[opacity].opacity-
>              TransparentOpacity);

              if (alpha < beta)
                opacity=i;
            }
  • coders/inline.c
    • メモリ確保で可変長分のサイズを追加。(これ結構やばいような)
<     inline_image=(unsigned char *) ResizeQuantumMemory(inline_image,i+quantum+1,
<       sizeof(*inline_image));
---
>     inline_image=(unsigned char *) ResizeQuantumMemory(inline_image,i+count+
>       quantum+1,sizeof(*inline_image));
  • coders/msl.c
    • MSL 出力で終端の \0 を追加。
>             *msl_info->image_info[n]->magick='\0';
              (void) WriteImage(msl_info->image_info[n], msl_info->image[n]);
  • coders/palm.c
    • RLE (scanline じゃない方)圧縮で読み込みデータが途中で終わった場合のケア。
             /* TODO move out of loop! */
              for (i=0; i < (ssize_t) bytes_per_row; )
              {
                count=(ssize_t) ReadBlobByte(image);
>                if (count < 0)
>                  break;
		count=MagickMin(count,(ssize_t) bytes_per_row-i);
                byte=(size_t) ReadBlobByte(image);
                (void) ResetMagickMemory(one_row+i,(int) byte,(size_t) count);
                i+=count;
              }
  • coders/png.c|
    • アルファ圧縮時に data 長が 0 の時は JDAA, JDAT chunk を生成しないように変更。
      • (前バージョンまで length 未初期化だったので、多分ゴミの JDAA, JDAT が生成される不具合があったかもしれない)
         if (jng_alpha_compression_method==0)
…
<      else
>      else if (length != 0)
        {
    • final_delay チェックで signed long の上限でひっくり返らない為のケア
         if (need_defi && final_delay > 2 && (final_delay != 4) &&
            (final_delay != 5) && (final_delay != 10) && (final_delay != 20) &&
<            (final_delay != 25) && (final_delay != 50) && (final_delay !=
>            (final_delay != 25) && (final_delay != 50) && (1UL*final_delay !=
               1UL*image->ticks_per_second))
           mng_info->need_fram=MagickTrue;  /* make it exact; cannot be VLC */
|<<
- coders/rla.c
--  文字列終端の \0 領域確保。
>|c|
<       gamma[16],
<       red_primary[24],
<       green_primary[24],
<       blue_primary[24],
<       white_point[24];
---
>       gamma[16+1],
>       red_primary[24+1],
>       green_primary[24+1],
>       blue_primary[24+1],
>       white_point[24+1];
<略>
  • coders/svg.c
    • Clone で生成した画像(svg_image)と元の画像(image)を指す変数を分けた。
>               Image
>                 *svg_image;

ChangeLog

2015-02-14  6.9.0-6 Cristy  <quetzlzacatenango@image...>
  * New version 6.9.0-6, SVN revision 18010.

2015-02-12  6.9.0-6 Dirk Lemstra <dirk@lem.....org>
  * Fixed command line execution in Windows for delegates that
    move files (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=27027).

2015-02-10  6.9.0-6 Cristy  <quetzlzacatenango@image...>
  * A transient bug for the write MSL element (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=27022).

2015-02-08  6.9.0-6 Glenn Randers-Pehrson <glennrp@image...>
  * Remove uninitialized, unused "p++" from coders/png.c, MNG reader.
  * Initialize "length" in coders/png.c, WriteJNGImage().
  * Fix signed/unsigned mismatch in coders/png.c, MNG reader.