2014-01-19 62 views
3

我有調整圖像大小下面的代碼:非GIF文件如何調整並保存Magick GIF文件++,而不必動畫損失

Image image; 
image.read(imagePath.toStdString()); 
Geometry newSize = Geometry(m_newSize.width(), m_newSize.height()); 
newSize.aspect(true); 
image.resize(newSize); 
image.write(newImagePath.toStdString()); 

此代碼做工精細。 GIF文件我虧動畫: Before resizing gif file

After resizng

如何調整GIF文件,而動畫的損失?

回答

3

我找到了解決辦法!感謝MofX正確的方向!

Geometry newSize = Geometry(m_newSize.width(), m_newSize.height()); 
    newSize.aspect(true); 
    list<Image> frames; 
    readImages(&frames, imagePath.toStdString()); 
    for (auto& image : frames) 
     image.resize(newSize); 
    writeImages(frames.begin(), frames.end(), newImagePath.toStdString()); 
2

您必須使用readImages和animateImages將動畫的所有幀讀入圖像列表並將它們添加到動畫中。

請看下面的例子在http://www.imagemagick.org/Magick++/STL.html

#include <list> 
#include <Magick++.h> 
using namespace std; 
using namespace Magick; 

int main(int /*argc*/,char **/*argv*/) 
{ 
    list<Image> imageList; 
    readImages(&imageList, "test_image_anim.gif"); 

    Image appended; 
    appendImages(&appended, imageList.begin(), imageList.end()); 
    appended.write("appended_image.miff"); 
    return 0; 
} 

唯一的問題是,該文件說,該animatImages只能在X11

+0

我試了一下。這不行。我用horizo​​ntaly順序獲得了所有幀的圖像,但是我需要gif動畫。 – Milovidov

+1

你不應該剛剛複製示例代碼...我指望你在我指出方向後自己做一些工作。你必須使用animateImages而不是appendImages來使其工作,並將其保存爲gif而不是miff – MofX

+0

我只是不明白如何使用animateImages爲例。這個函數有列表迭代器作爲參數並返回void。我如何獲得動畫的結果並編寫這個結果? coalesceImages方法的相同問題。 – Milovidov

相關問題