Cara Mengubah GIF Menjadi Lembar Sprite Tanpa Bingkai Berbayang

Anda mengekstrak GIF, tetapi beberapa frame berisi bagian dari pose sebelumnya. Ini biasanya berarti proses ekspor menyimpan area persegi panjang pembaruan GIF seolah-olah area tersebut merupakan gambar lengkap. Berikut cara mendapatkan frame yang utuh dan memilih keluaran yang dapat digunakan oleh gim Anda.

Mengapa menyimpan setiap blok gambar GIF tidak cukup

Animasi GIF tidak selalu berupa tumpukan gambar ukuran penuh. Bingkai berikutnya dapat hanya menyimpan persegi panjang yang berubah. Bingkai itu juga membawa instruksi disposal yang memberi tahu pemutar cara menangani gambar sebelumnya sebelum menerapkan gambar berikutnya. Jika pengekstrak mengabaikan instruksi tersebut, lengan, kaki, atau bayangan lama tetap terlihat sebagai jejak. Jika hanya persegi panjang itu yang disimpan, PNG hasil ekspor memiliki ukuran berbeda-beda.

Untuk lembar sprite, setiap sel memerlukan gambar lengkap pada kanvas konsisten. Urutan yang benar: terapkan aturan disposal bingkai sebelumnya, gambar pembaruan saat ini, lalu salin kanvas lengkap sebagai PNG untuk momen tersebut. Alat GIF ImageMint melakukan penggabungan itu sebelum ekspor; Anda tidak perlu menempatkan bingkai tambalan secara manual.

Robot seni piksel, tambalan sebagian lengan terangkat, dan bingkai robot utuh hasil penggabungan.
Area persegi panjang yang berubah bukanlah satu frame animasi lengkap. Terapkan langkah pembuangan frame dan pengomposisian yang diperlukan sebelum menyimpan seluruh kanvas; jika tidak, bagian dari pose sebelumnya dapat tertinggal. Buka gambar ukuran penuh

Contoh konversi 12 bingkai

  1. Buka GIF sumber dalam GIF ke Lembar Sprite. Periksa jumlah bingkai dan ukuran kanvas yang dilaporkan. Dua belas bingkai berukuran 64 × 64 piksel seharusnya menghasilkan dua belas keluaran utuh berukuran 64 × 64, meskipun pembaruan internal GIF lebih kecil.
  2. Untuk PNG kisi, atur Gambar per baris ke 4. Sheet hasil memiliki empat kolom dan tiga baris, sehingga dimensi yang diharapkan 256 × 192 piksel. Pemeriksaan dimensi sederhana ini menangkap banyak ekspor salah.
  3. Simpan PNG kisi ketika engine memerlukan lembar berjarak merata. Simpan ZIP ketika menginginkan PNG bernomor terpisah. ZIP juga berisi frame-delays.json; pertahankan jika GIF asli berhenti pada beberapa pose lebih lama daripada pose lainnya.
  4. Buka hasil dalam editor target dan periksa bingkai pertama, tengah, serta terakhir. Pastikan tidak ada pose sebelumnya tertinggal dan karakter tetap dalam area 64 × 64 sama.

Jebakan waktu: satu lembar tidak menentukan kecepatan pemutaran

Lembar PNG menyimpan piksel, bukan durasi bingkai. Bayangkan GIF 12 bingkai yang sebelas bingkainya berlangsung 80 ms, tetapi bingkai terakhir bertahan 400 ms. Memutar lembar hasil ekspor pada 12 fps tetap membuat setiap bingkai berlangsung sekitar 83 ms, sehingga jedanya hilang. Itu bukan kesalahan ekstraksi: informasi waktu memang berada di luar PNG. Baca durasi dalam ZIP dan buat kembali bingkai yang ditahan dalam engine Anda, atau ulangi bingkai terakhir tersebut sebagai pendekatan yang disengaja.

Pemeriksaan cepat: jika gerakan terlihat benar tetapi terasa terlalu cepat, bandingkan jeda per bingkai sebelum mengubah gambar. Jika gerakan meninggalkan jejak, periksa komposisi dan disposal bingkai.

Pilih keluaran untuk langkah berikutnya

Anda memerlukanSimpanIngat
Satu tekstur seragam untuk enginePNG KisiSimpan jumlah kolom dan ukuran sel untuk impor.
Bingkai yang dapat diedit atau durasi tidak seragamZIP berisi PNGSimpan frame-delays.json bersama gambar.
Jumlah pose terpilih yang lebih sedikitZIP, lalu edit bingkaiMenghapus bingkai mengubah durasi loop kecuali waktunya disesuaikan.

ImageMint membatasi masukan GIF hingga 20 MB, 100 bingkai, 1024 piksel per sisi, dan total 20 juta piksel bingkai untuk melindungi tab peramban. Sumber lebih besar perlu diproses terlebih dahulu dalam editor desktop. Gunakan ulang hanya animasi milik Anda atau yang diizinkan untuk digunakan.

Pertahankan jeda tidak merata saat membuat ulang animasi

Untuk contoh dua belas bingkai, durasi totalnya 11 × 80 + 400 = 1280 ms. Jika target hanya mendukung satu durasi tetap, Anda dapat mendekati pose yang ditahan dengan mengulangnya lima kali pada 80 ms. Ini menghasilkan enam belas entri linimasa dari dua belas gambar berbeda dan mempertahankan durasi total. Ini adalah edit linimasa yang disengaja, bukan opsi yang diterapkan otomatis oleh pengekstrak.

Jangan samakan gambar berulang dengan duplikat tak diinginkan. Dua bingkai yang tampak sama mungkin menyimpan jeda yang disengaja. Menghapus satu tanpa memindahkan durasinya memperpendek animasi. Simpan ekstraksi yang belum diubah terlebih dahulu dan edit salinan saat mengoptimalkan urutan.

Impor lembar tanpa memutar sel kosong di akhir

Jika sepuluh bingkai 64 × 64 ditempatkan dalam empat kolom, keluaran berukuran 256 × 192: dua belas posisi tetapi hanya sepuluh bingkai nyata. Dua sel terakhir kosong. Catat ukuran sel, jumlah kolom, dan jumlah bingkai sebenarnya bersama berkas. Pengimpor kisi yang menyimpulkan jumlah bingkai hanya dari lebar dan tinggi perlu diperbaiki rentang animasinya.

Ketika ekspor sheet melebihi batas sisi, mengubah kolom dapat membuat bentuknya sesuai, tetapi tidak mengurangi jumlah bingkai yang didekode. Dua belas bingkai 64 × 64 menggunakan 49,152 piksel bingkai sebelum sel yang tidak terpakai dihitung. GIF terkompresi yang kecil tetap dapat didekode menjadi rangkaian besar, jadi kurangi resolusi atau bingkai di editor jika masalahnya batas total piksel.

Daftar periksa ekstraksi akhir

  • Bingkai keluaran memiliki dimensi kanvas penuh yang dilaporkan.
  • Bingkai tengah dan terakhir tidak berisi pose sebelumnya yang tidak disengaja.
  • Aplikasi penerima memakai jumlah bingkai nyata, bukan semua sel lembar.
  • Jeda yang tidak sama dipertahankan atau didekati secara sadar.
  • GIF asli dan izin penggunaannya tetap disimpan.

Coba alur kerjanya

Buka GIF secara lokal, lalu simpan lembar PNG seragam atau ZIP berisi bingkai utuh dan data waktu.

Ekstrak bingkai GIF →