yoyaのメモ

2016/11/26(Sat) ImageMagick-6.9.6-6差分

[]ImageMagick-6.9.6-6差分

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

The latest release of ImageMagick is version 6.9.6-6

まとめ

差分

ChangeLog にないもの
ChangeLog の分
  • magick/annotate.c
602a603
>   width=0;
647a649,703
>   if (width > image->columns)
>     {
>       char
>         *text;
>
>       /*
>         No convenient break point, force one.
>       */
>       text=AcquireString(draw_info->text);
<大量に>
  • coders/ept.c
218c218
<   if (offset < 30)
---
>   if ((ept_info.tiff_length != 0) && (offset < 30))
225c225
<   if (offset < 30)
---
>   if ((ept_info.postscript_length != 0) && (offset < 30))
  • magick/draw.c
1442c1442,1443
<   clone_info->clip_mask=(char *) NULL;
---
>   if (clone_info->clip_mask != (char *) NULL)
>     clone_info->clip_mask=DestroyString(clone_info->clip_mask);

これはこれで NULL を入れなくなったので、ワイルドポインタの危険性が追加されたような?

ChangeLogにない差分
251c251
<       @for dir in $(DOCDIRS) ; do \
---
>       for dir in $(DOCDIRS) ; do \
258,261c258,263
<         for file in $$docsrcdir/*.* ; do \
<           echo "$(INSTALL_DATA) $$file $(DESTDIR)$(pkgdocdir)/$$dir" ; \
<           $(INSTALL_DATA) "$$file" $(DESTDIR)$(pkgdocdir)/$$dir ; \
<         done ; \
---
>         if test -d $$docsrcdir; then \
>           for file in $$docsrcdir/*.* ; do \
>               echo "$(INSTALL_DATA) $$file $(DESTDIR)$(pkgdocdir)/$$dir" ; \
>               $(INSTALL_DATA) "$$file" $(DESTDIR)$(pkgdocdir)/$$dir ; \
>           done ; \
>         fi; \

  • coders/rle.c
230c230
<     if (map_length >= 32)
---
>     if (map_length >= 22)
337a338,339
>     if ((iris_info.dimension == 0) || (iris_info.dimension > 3))
>       ThrowReaderException(CorruptImageError,"ImproperImageHeader");
360a363
>     image->matte=iris_info.depth == 4 ? MagickTrue : MagickFalse;
553,558d555
<     /*
<       Initialize image structure.
<     */
<     image->matte=iris_info.depth == 4 ? MagickTrue : MagickFalse;
<     image->columns=iris_info.columns;
<     image->rows=iris_info.rows;
  • config/config.h.in
    • readdir_r の有無を configure で吸収
396,398d395
< /* Define to 1 if you have the `readdir_r' function. */
< #undef HAVE_READDIR_R
<

magick/cache.c

1699d1698
<   assert(cache_info->opencl != (OpenCLCacheInfo *) NULL);
diff -rB ImageMagick-6.9.6-5/magick/compare.c ImageMagick-6.9.6-6/magick/compare.c
765a766
>     gamma,
  • magick/property.c
    • indent オプションが消えて、colors, compression, interlace, quality, rendering-intent が追加された
>       if (LocaleCompare("colors",property) == 0)
>         {
>           image->colors=GetNumberColors(image,(FILE *) NULL,&image->exception);
>           (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
>             image->colors);
>           break;
>         }
2908a2916,2921
>       if (LocaleCompare("compression",property) == 0)
>         {
>           string=CommandOptionToMnemonic(MagickCompressOptions,(ssize_t)
>             image->compression);
>           break;
>         }
2984a2998,3003
>       if (LocaleCompare("interlace",property) == 0)
>         {
>           string=CommandOptionToMnemonic(MagickInterlaceOptions,(ssize_t)
>             image->interlace);
>           break;
>         }
3137a3157,3166
>     case 'q':
>     {
>       if (LocaleCompare("quality",property) == 0)
>         {
>           (void) FormatLocaleString(value,MaxTextExtent,"%.20g",(double)
>             image->quality);
>           break;
>         }
>       break;
>     }
3139a3169,3174
>       if (LocaleCompare("rendering-intent",property) == 0)
>         {
>           string=CommandOptionToMnemonic(MagickIntentOptions,(ssize_t)
>             image->rendering_intent);
>           break;
>         }
4089,4100d4123
<           break;
<         }
<       if (LocaleCompare("intent",property) == 0)
<         {
<           ssize_t
<             rendering_intent;
<
<           rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
<             value);
<           if (rendering_intent < 0)
<             break;
<           image->rendering_intent=(RenderingIntent) rendering_intent;
  • magick/quantize.c
    • 減色の色決定時の色差計算にガンマ値を考慮
>     gamma,
2187,2190c2188,2191
<   image->error.mean_error_per_pixel=(double) mean_error_per_pixel/area;
<   image->error.normalized_mean_error=(double) QuantumScale*QuantumScale*
<     mean_error/area;
<   image->error.normalized_maximum_error=(double) QuantumScale*maximum_error;
---
>   gamma=PerceptibleReciprocal(area);
>   image->error.mean_error_per_pixel=gamma*mean_error_per_pixel;
>   image->error.normalized_mean_error=gamma*QuantumScale*QuantumScale*mean_error;
>   image->error.normalized_maximum_error=QuantumScale*maximum_error;

  • magick/utility.c
    • readdir_r がない時の処理
1551,1554d1550
< #if defined(MAGICKCORE_HAVE_READDIR_R)
<   return(readdir_r(directory,entry,result));
< #else
<   (void) entry;
1556,1558c1552,1556
<   *result=readdir(directory);
<   return(errno);
< #endif
---
>   entry=readdir(directory);
>   *result=entry;
>   if ((entry == (struct dirent *) NULL) && (errno != 0))
>     return(-1);
>   return(0);

ChangeLog

2016-11-25  6.9.6-6 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.6-6, GIT revision 11169:94edafc:20161125.

2016-11-20  6.9.6-6 Cristy  <quetzlzacatenango@image...>
  * If a convenient line break is not found, force it for caption: (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=30887).
  * Off by 1 error when computing the standard deviation (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=30866).
  * Apply Debian patches, (reference
    https://github.com/ImageMagick/ImageMagick/issues/304).
  * Permit EPT images with just a TIFF or EPS image, not both (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=30921).
  * The -clone option no longer leak memory.

2016/11/15(Tue) ImageMagick-6.9.6-5差分

[]ImageMagick-6.9.6-5差分

ImageMagick-6.9.6-4差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.6-5

まとめ

差分

  • CMYK 画像の -sharpen / -convolve 処理修正
  • index.htmlURL 間違いの修正 (www => script)
  • -level-colors でグレー画像の処理ができてなかったかも?
  • MATLAB v4 形式で読めるファイルを増やした
ChangeLog の分
static ssize_t MorphologyPrimitive(const Image *image, Image *result_image,
     const MorphologyMethod method, const ChannelType channel,
     const KernelInfo *kernel,const double bias,ExceptionInfo *exception)
<略>
<           SetPixelIndex(q_indexes+y,GetPixelIndex(p_indexes+r));
---
>           SetPixelIndex(q_indexes+y,GetPixelIndex(p_indexes+y+r));
<以下同上>

CMYK は、CMY を RGB変数を使い K を別(index)で処理するが、その際の座標計算で y を足し忘れてた。

ChangeLogにない差分
  • coders/mat.c
    • MATLAB ファイル読み込みの複数イメージ対応、HDR.Type 非0対応。
static Image *ReadMATImageV4(const ImageInfo *image_info,Image *image,
  ExceptionInfo *exception)
<略>
>   while (EOFBlob(image) != MagickFalse)
<   if (HDR.Type[3] != 0) return((Image *) NULL);    /* Data format */
<   if (HDR.Type[2] != 0) return((Image *) NULL);    /* Always 0 */
<   if (HDR.Type[0] == 0)
>     if (HDR.Type[3] != 0)
>       break;    /* Data format */
>     if (HDR.Type[2] != 0)
>       break;    /* Always 0 */
>     if (HDR.Type[0] == 0)
<略>
>     HDR.Type[3]=ldblk % 10; ldblk /= 10;  /* T digit */
>     HDR.Type[2]=ldblk % 10; ldblk /= 10;  /* P digit */
>     HDR.Type[1]=ldblk % 10; ldblk /= 10;  /* O digit */
>     HDR.Type[0]=ldblk;  /* M digit */
>     if (HDR.Type[3] != 0)
>       break;    /* Data format */
>     if (HDR.Type[2] != 0)
>       break;    /* Always 0 */
>     if (HDR.Type[0] == 0)
>       {
>         HDR.nRows=ReadBlobLSBLong(image);
>         HDR.nCols=ReadBlobLSBLong(image);
>         HDR.imagf=ReadBlobLSBLong(image);
>         HDR.nameLen=ReadBlobLSBLong(image);
>         endian=LSBEndian;
>       }
>     else
>       {
>         HDR.nRows=ReadBlobMSBLong(image);
>         HDR.nCols=ReadBlobMSBLong(image);
>         HDR.imagf=ReadBlobMSBLong(image);
>         HDR.nameLen=ReadBlobMSBLong(image);
>         endian=MSBEndian;
>       }
>     if ((HDR.imagf !=0) && (HDR.imagf !=1))
  • coders/tiff.c
    • SetImageProperty 前の NULL チェック
<   if (TIFFGetField(tiff,TIFFTAG_ARTIST,&text) == 1)
---
>   if ((TIFFGetField(tiff,TIFFTAG_ARTIST,&text) == 1) &&
>       (text != (char *) NULL))
<以下同様>
  • magick/enhance
    • LevelColors でグレー画像を一度 R,G,B にばらすはずが条件式が逆で処理が抜けてた。。
MagickExport MagickBooleanType LevelColorsImageChannel(Image *image,
  const ChannelType channel,const MagickPixelPacket *black_color,
  const MagickPixelPacket *white_color,const MagickBooleanType invert)
<略>
<       ((IsGrayColorspace(black_color->colorspace) == MagickFalse) ||
<        (IsGrayColorspace(white_color->colorspace) == MagickFalse)))
---
>       ((IsGrayColorspace(black_color->colorspace) != MagickFalse) ||
>        (IsGrayColorspace(white_color->colorspace) != MagickFalse)))
    (void) SetImageColorspace(image,sRGBColorspace);

ChangeLog

2016-11-15  6.9.6-5 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.6-5, GIT revision 11139:5175b3c:20161115.

2016-11-10  6.9.6-5 Cristy  <quetzlzacatenango@image...>
  * Web pages were broken when we moved to HTTPS protocol.
  * Restore -sharpen / -convolve options to work with CMYK (reference
    https://github.com/ImageMagick/ImageMagick/issues/299).

2016/11/09(Wed) ImageMagick-6.9.6-4差分

[]ImageMagick-6.9.6-4差分

ImageMagick-6.9.6-3差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.6-4

まとめ

差分

ChangeLog の分
ChangeLogにない差分

(調査中)

ChangeLog

2016-11-08  6.9.6-4 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.6-4, GIT revision 11130:d7a7e4d:20161108.

2016-11-01  6.9.6-4 Cristy  <quetzlzacatenango@image...>
  * Off by one memory allocation (reference
    https://github.com/ImageMagick/ImageMagick/issues/296).
  * Prevent fault in MSL interpreter (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=30797).

2016/10/31(Mon) ImageMagick-6.9.6-3差分

[]ImageMagick-6.9.6-3差分

ImageMagick-6.9.6-2差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.6-3

まとめ

差分

ChangeLog の分
ChangeLogにない差分
  • coders/dpx.c
    • DPX 読み込み時のメモリリーク修正。(DPXInfo に creator やsoftware に URL が入っていない時に発生する)
755,758c755,761
<       (void) FormatImageProperty(image,"dpx:file.creator","%.100s",
<         GetMagickHomeURL());
<       (void) FormatImageProperty(image,"software","%.100s",
<         GetMagickHomeURL());
---
>       char
>         *url;
>
>       url=GetMagickHomeURL();
>       (void) FormatImageProperty(image,"dpx:file.creator","%.100s",url);
>       (void) FormatImageProperty(image,"software","%.100s",url);
>       url=DestroyString(url);

(調査中)

ChangeLog

2016-10-30  6.9.6-3 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.6-3, GIT revision 11117:e857a26:20161030.

2016-10-16  6.9.6-3 Dirk Lemstra <dirk@lem.....org>
  * Added layer ZIP compression to the PSD encoder.

2016/10/20(Thu) SWFEditor 0.65 をリリースしました

SWFEditor 0.65 をリリースしました

  • PHP7 対応しました。
  • chunk 間にゴミがある JPEG 指定で replace 出来ない不具合を修正しました。

PHP7 対応


@withgod 先生から対応コードを頂きました。ありがとうございます。

参考)


JPEG chunk 間のゴミ

chunk の頭は 0xff なので chunk の頭と思って読んで 0xff 以外だった場合は、読み飛ばしてその後ろの 0xff を探すようにしました。