PNG şeridini GIF'e nasıl dönüştürebilirim?


12

Yani, bu animasyonu bir programda yaptım, ancak bir PNG dizisi olarak dışa aktarmayı desteklemiyor gibi görünüyor, böylece bir GIF'e dönüştürebilirim. Animasyon 100 kareden fazladır, bu nedenle her görüntüyü tek tek kaydetmek yaş alır. Ancak, bir film filmi gibi bir "şerit" olarak dışa aktarmayı destekler. Animasyondaki her resim aynı boyutlara sahiptir. Programın "strip" özelliği şu şekilde çalışır.

Animasyondaki görüntüler yatay olarak istiflenir, ilk kare en solda, son kare en sağdadır. Çerçeveler arasında boşluk yoktur ve animasyonda X kare varsa dosya adı genellikle "name_stripX.png" olur. Her bir kare 32 x 32 ve animasyon 8 kareye sahip olsaydı, bu dosyanın genişliği 256 ve yüksekliği 32 olurdu.

İşte bazı örnek çıktılar, her renk bir kareyi doldurur:

Örnek Çıktı

Ayrıca, işleri biraz daha temizlemek için programa "Game Maker 8.0" adı verilir.

Yanıtlar:


16

Görüntüleri farklı şekillerde dönüştürmek için ImageMagick'i kullanabilirsiniz ve bunu oldukça kolay bir şekilde yapabilmelidir. İlk önce parçalara bölünebilirsiniz ( original.pngkaynak görüntü olmak ve bu durumda 32x32 piksel boyutunda):

convert original.png -crop 32x32 parts-%02d.png

Daha sonra onu bir animasyona dönüştürebilirsiniz ( -loop 1döngü olmasını istemiyorsanız kullanın):

convert -loop 0 -page +0+0 ./parts*.png output.gif

Sonuçlanan:

İlk komutun çıkış PNG'lerinde bir ofset bulunur, bu nedenle -page +0+0animasyon seçeneği olmadan :

Ekleyebileceğiniz çeşitli seçenekler vardır (çoğunlukla ikinci komutta), -delayvb . Animasyonu daha küçük olacak şekilde (ve yükleme / oluşturma daha hızlı) optimize edebilirsiniz - örneğin buradan ödünç alınır :

convert output.gif -fuzz 10% -layers Optimize optimised.gif

veya gifsicle kullanarak

gifsicle -O output.gif -o optimised.gif

DÜZENLE: Çerçeveler saydamsa,
-dispose Backgroundseçeneği ekleyerek değiştirilecek çerçeveleri ayarlayabilirsiniz , böylece bir sonraki kare yüklendiğinde bir çerçeve atılırsa:


Yukarıdaki örnek pageseçenek olmadan yapılır, böylece açıkça gösterir

Buradaki sorun, muhtemelen elde edilen görüntüyü o zaman çok optimize edememenizdir - bu nedenle başka bir yol, kareleri opak hale getirmek olabilir, böylece bir sonraki kare bir öncekini kapsar.


Resmin saydamlığı var ve temelde bir sonraki kareyi bir öncekinin üzerine çiziyor, bunu yapabilmemin herhangi bir yolu var mı?
user245115

Kaynak görüntüden saydamlığı kaldırmak en kolay yöntemdir. Ancak daha fazla parametre ile yapılabilir.
david6

@ user245115 - yer paylaşımı yerine çerçeveleri değiştirin - bkz. düzenleme.
Wilf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.