Spore memungkinkan makhluk yang dibuat pemain untuk dibagikan dengan mengekspor .png
file. Itu .png
adalah foto makhluk itu, tetapi jika itu diimpor ke dalam permainan, informasi makhluk itu (seperti tekstur, ukuran, dan bentuk) juga disertakan.
Bagaimana saya bisa mengimplementasikan fitur seperti itu?
file-format
savegame
png
ibrabeicker
sumber
sumber
Jawaban:
Jika yang benar-benar Anda butuhkan adalah file PNG, kemungkinan mereka hanya menambahkan informasi ke dalam file tersebut. Ini sebenarnya adalah praktik Steganografi . Sering kali, ini digunakan untuk menyembunyikan muatan atau pesan rahasia dalam hal-hal yang tampaknya dihadapi publik. Namun, kemungkinan dalam hal ini metode ini adalah apa yang digunakan. Stegongraphy yang khas akan keluar dari jalan untuk menyembunyikan konten, tetapi tidak ada alasan mengapa seseorang tidak bisa hanya menambahkan data dari gambar di akhir file dan mengambilnya.
Beberapa alat menyandikan data ini untuk Anda, pencarian google memunculkan setidaknya ini dan ini .
PNG memiliki tanda tangan byte
$89
di awal, jadi ada kemungkinan bahwa informasi tersebut dimasukkan setelah struktur PNG itu sendiri dan hanya diuraikan oleh game SPORE.Namun, penelitian lebih lanjut yang diberikan oleh jawaban lain dan pencarian di google mengungkapkan bahwa Spore sebenarnya hanya menggunakan versi Stegongraphy untuk menyembunyikan informasi dalam bit alpha. Dengan mengingat hal ini, kita dapat mengesampingkan kemungkinan data yang ditambahkan atau meta-data.
Perlu dicatat bahwa meta data masih merupakan pilihan yang sangat layak, jika data sedang diurai secara lokal. Jika informasi itu dapat dibagikan di seluruh web atau disandikan ulang, ekspor tidak dijamin untuk menyimpan semua informasi Anda. Saat data piksel digunakan, ia dapat bertahan dari konversi tanpa kehilangan tanpa masalah.
sumber
The format PNG memiliki dukungan untuk lebih-atau-kurang sewenang-wenang metadata. Standar PNG mendefinisikan file PNG, pada dasarnya serangkaian potongan, beberapa di antaranya diperlukan (dan berisi data gambar). Namun, yang lain bersifat opsional. Misalnya, ada bongkahan untuk menyimpan informasi gamma atau data histogram.
Secara khusus, ada
tEXt
potongan yang dapat digunakan untuk menyimpan pasangan teks kunci / nilai sewenang-wenang. Ini dapat digunakan untuk mengirim segala jenis data sewenang-wenang yang Anda inginkan, asalkan Anda dapat mewakili data tersebut sebagai teks (yang kemungkinan besar cukup).Anda akan memerlukan pustaka PNG yang memungkinkan Anda mengakses dan memanipulasi potongan tambahan ini (seperti pustaka referensi ), atau Anda harus menulis sendiri. Maka itu hanya masalah memilih cara menyandikan data yang Anda inginkan sebagai pasangan kunci / nilai. Saya menyarankan yang berikut ini:
Untuk kepentingan membuat jawaban yang lebih lengkap, saya juga akan menunjukkan bahwa ada pendekatan lain (sebelumnya didokumentasikan oleh jawaban @Vaughn dan @ Alexis): menyandikan data tambahan yang Anda inginkan langsung dalam piksel gambar Anda, mendistribusikan data Anda ke seluruh bit orde rendah dari saluran warna. Pendekatan ini tidak memerlukan penggunaan metadata tambahan, yang berarti Anda dapat menerapkannya sepenuhnya tanpa bergantung padanya atau khawatir tentang program eksternal yang salah menangani metadata itu. Itu juga punya faktor "keren" yang sangat tinggi, dan karena Anda hanya menggunakan bit orde rendah gambar akan tetap terlihat benar bagi mata manusia. Namun, itu berarti ukuran gambar Anda adalah faktor pengendali utama untuk jumlah data yang dapat Anda simpan; jika Anda membutuhkan lebih banyak penyimpanan, Anda harus mengalokasikan lebih banyak piksel ke gambar.
Seperti yang telah ditunjukkan orang lain, proses ini dikenal sebagai steganografi .
sumber
Pengembang Monako sebenarnya membuat artikel yang bagus tentang bagaimana mereka dan Spore menyelesaikan ini.
Ringkasan dasar dari apa yang mereka lakukan cukup sederhana:
Cukup lakukan ini secara terbalik untuk mengambil data Anda.
Ide dasar di balik proses ini adalah bahwa ada banyak piksel dalam gambar, dan bit urutan terendah dari setiap saluran warna tidak membuat perbedaan besar . Selain itu, sekitar setengah dari bit yang Anda tulis hanya akan menjadi apa yang ada pada gambar tersebut. Apa yang Anda dapatkan pada dasarnya adalah gambar yang tepat, tetapi dengan artefak aneh. Dia membutuhkan waktu untuk mencatat bahwa artefak ini hanya benar-benar terlihat jika Anda benar-benar mengubah kontras / saturasi dan memperbesar. Dia memang memiliki gambar sumber dengan banyak noise awal.
Dari artikel:
Mengapa memilih teknik ini daripada hanya menyimpannya di metadata?
Kredit ekstra: untuk mengurangi kebisingan yang terlihat, Anda dapat menggunakan PRNG dengan seed tetap untuk memilih piksel yang akan dimodifikasi. Anda juga bisa hanya memodifikasi beberapa saluran warna dengan cara yang sama.
sumber
Saya mengunduh dan memeriksa beberapa makhluk Spore dari Sporepedia. Dari yang saya pelajari itu:
Perlu dicatat bahwa ini adalah apa yang Spore lakukan, ini adalah metode yang mengutamakan kesederhanaan di sebagian besar masalah lainnya.
Pilihan menggunakan stenografi daripada blok data tambahan berarti bahwa data akan bertahan jika gambar disandikan ulang, misalnya oleh situs web, meskipun itu tidak akan selamat dari penskalaan atau kompresi Jpeg.
Saya berpikir bahwa alternatif yang paling menonjol sebenarnya adalah hanya menyandikan id dalam gambar, dan membiarkan data aktual disimpan di server pusat di mana id ini dapat ditukar dengan data makhluk yang tepat. Id semacam itu akan cukup pendek sehingga bisa dikodekan dalam format stenografi penskalaan dan toleran.
Kemungkinan peningkatan sederhana pada format Spore meliputi:
sumber