ImageMagick-6.9.1-1差分

ImageMagick-6.9.1-0差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.1-1

まとめ

  • レイヤー(画像リスト)で連続するコマが同一画像だった場合に、比較処理をスキップ。(少し無駄な処理してた)
  • mkv 拡張子に対応 (mpeg)
  • JPEG2000 で透明度の処理が大小逆にしてる処理が気になる。

差分

>     if ((bounds[i].x == -1) && (bounds[i].y == -1) &&
>         (bounds[i].width == 1) && (bounds[i].height == 1))
>       {
>         /*
>           An empty frame is returned from CompareImageBounds(), which means the
>           current frame is identical to the previous frame.
>         */
>         i++;
>         continue;
>       }
ChangeLogにない差分
  • coders/clip.c, mask.c, preview.c, thumbnail.c, vid.c
    • 内部のイメージ構造体のメンバーの一つを初期化
<   *write_info->magick='\0';
  • coders/dcm.c
    • ヘッダを読む途中でデータが切れた時の異常系を追加。
<                 (void) sscanf(transfer_syntax+17,".%d.%d",&type,&subtype);
---
>                 count=sscanf(transfer_syntax+17,".%d.%d",&type,&subtype);
>                 if (count < 1)
>                   ThrowReaderException(CorruptImageError,"ImproperImageHeader");
  • coders/jp2.c
    • 透明度がひっくり返ってた?
<              q->opacity=ClampToQuantum(pixel);
---
>              q->opacity=ClampToQuantum(QuantumRange-pixel);
||<<
- coders/matte.c
>|c|
<   *write_info->magick='\0';
---
>   if (LocaleCompare(write_info->magick,"MATTE") == 0)
  • coders/meta.c
    • 独自にバッファ・サイズ定義をやめて、共通のを使う

< #define BUFFER_SZ 4096< inputlen = BUFFER_SZ;
> inputlen = MaxTextExtent;
|

    • パーサの異常系を真面目に作る。
<   name = token = (char *) NULL;
---
>   if (line == (char *) NULL)
>     return(-1);
>   newstr = name = token = (char *) NULL;
338a338,339
>     if (token == (char *) NULL)
>       break;
339a341,342
>     if (newstr == (char *) NULL)
>       break;
492a496
>     if (token != (char *) NULL)
493a498
>     if (newstr != (char *) NULL)
498a504,509
>   if (token != (char *) NULL)
>     token=DestroyString(token);
>   if (newstr != (char *) NULL)
>     newstr=DestroyString(newstr);
>   if (name != (char *) NULL)
>     name=DestroyString(name);
  • coders/miff.c
    • 大量に消されてるけど何だろう。。
<     if (IsGrayImage(image,&image->exception) == MagickFalse)
<       {
<         /*
<           sRGB masquerading as a grayscale image?
<         */
<         if (IsGrayColorspace(image->colorspace) != MagickFalse)
<           (void) SetImageColorspace(image,sRGBColorspace);
<       }
<     else
<       if (IsGrayColorspace(image->colorspace) == MagickFalse)
<         (void) SetImageColorspace(image,GRAYColorspace);
>   entry=SetMagickInfo("MKV");
>   entry->decoder=(DecodeImageHandler *) ReadMPEGImage;
>   entry->encoder=(EncodeImageHandler *) WriteMPEGImage;
>   entry->magick=(IsImageFormatHandler *) IsMPEG;
>   entry->blob_support=MagickFalse;
>   entry->description=ConstantString("Multimedia Container");
>   entry->module=ConstantString("MPEG");
>   (void) RegisterMagickInfo(entry);
>   (void) UnregisterMagickInfo("MKV");
  • coders/pdf.c
    • trimbox という変数だけ増えてる。何かする気だ。
    • stop-on-error を今までスルーしてた?
>     trimbox;
511a513,516
>   stop_on_error=MagickFalse;
>   option=GetImageOption(image_info,"pdf:stop-on-error");
>   if (option != (const char *) NULL)
>     stop_on_error=IsMagickTrue(option);
726a732,733
>   if (stop_on_error != MagickFalse)
>     (void) ConcatenateMagickString(options,"-dPDFSTOPONERROR ",MaxTextExtent);
  • coders/wpg.c
    • 画像データを読む途中で止まった時のケアを
<             RunCount=ReadBlobByte(image);
---
>             c=ReadBlobByte(image);
>             if (c < 0)
>               break;
>             RunCount=(unsigned char) c;
606a613,614
>           if (RunCount < 0)
>             break;
  • magick/coder.c
    • .mkv 拡張子に対応
static const CoderMapInfo
  CoderMap[] =
  {
>     { "MKV", "MPEG" },
  • magick/composite.c
    • Quantum の文字を消してる。(不明)
<           SetPixelRed(q,ClampToQuantum(composite.red));
<           SetPixelGreen(q,ClampToQuantum(composite.green));
<           SetPixelBlue(q,ClampToQuantum(composite.blue));
---
>           SetPixelRed(q,ClampPixel(composite.red));
>           SetPixelGreen(q,ClampPixel(composite.green));
>           SetPixelBlue(q,ClampPixel(composite.blue));
  • wand/drawing-wand.c
    • struct _DrawVTable が丸ごと消えました。使ってなかった?
< /* Vector table for invoking subordinate renderers */
< struct _DrawVTable
< {
<   DrawingWand *(*DestroyDrawingWand) (DrawingWand *);
<   void (*DrawAnnotation)(DrawingWand *,const double,const double,
<略>
<   MagickBooleanType (*PopDrawingWand)(DrawingWand *);
<   MagickBooleanType (*PushDrawingWand)(DrawingWand *);
< };
>   if (dasharray == (const double *) NULL)
>     n_new=0;
6898a6792
>       wand->index--;

ChangeLog

2015-04-04  6.9.1-1 Cristy  <quetzlzacatenango@image...>
  * New version 6.9.1-1, SVN revision 18308.

2015-03-21  6.9.1-1 Cristy  <quetzlzacatenango@image...>
  * Skip empty frames when comparing layers (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=27234).