Как изменить размер анимированного GIF-файла с помощью imagemagick, не разрушая анимацию с помощью C #? - PullRequest
0 голосов
/ 08 февраля 2011

Я использую библиотеку imagemagick DLL (см. http://www.imagemagick.org) для изменения размера изображения,
Но когда я изменяю размер анимированного GIF-изображения, он начинает работать.

Я использую код нижеизменить размер изображения (тип изображения: PNG, GIF, JPG, BMP, TIF ...)

ImageMagickObject.MagickImage imgLarge = new ImageMagickObject.MagickImage();
 object[] o = new object[] { strOrig, "-resize", size, "-gravity", "center", "-colorspace", "RGB", "-extent", "1024x768", strDestNw };
imgLarge.Convert(ref o);

Как это можно исправить. см. результат изображения enter image description here

1 Ответ

3 голосов
/ 08 февраля 2011

Я думаю, вам нужно сначала извлечь каждый кадр из gif, изменить размер каждого отдельного кадра, а затем собрать его вместе.

Редактировать: как это?Не проверено и не построено ...

int maxFrames=32;
ImageMagickObject.MagickImage imgLarge = new ImageMagickObject.MagickImage();  

// first extract all frames from gif to single png files
for(int frame=0; frame<maxFrames;frame++)
{
   object[] o = new object[] { String.Format(strOrig+"[{0}]", frame)
       ,  String.Format("tmp{0}.png", frame) };
   imgLarge.Convert(ref o);    
}
// resize every single png files
// add resized filenames to stringbuilder
StringBuilder filenames = new StringBuilder();
for(int frame=0; frame<maxFrames;frame++)
{
   object[] o = new object[] { String.Format("tmp{0}.png", frame)
                , "-resize"
                , size 
                , "-gravity"
                , "center"
                , "-colorspace"
                , "RGB"
                , "-extent"
                , "1024x768"
                , String.Format("tmp-resized{0}.png", frame) };
   filenames.Append(String.Format("tmp-resized{0}.png", frame));
   filenames.Append(Environment.NewLine);
   imgLarge.Convert(ref o);    
}
// write resized filenames to file
File.WriteAllText("tmp-resized-files.txt", filenames);
// create resize animated gif based on filenames in the tmp-resized-files.txt
   object[] o = new object[] { "@tmp-resized-files.txt"
       ,  strDestNw };
   imgLarge.Convert(ref o);    
...