http://zk-phi.github.io/megamoji
Harap promosikan jika Anda menerapkan ide -ide baru atau anime menyebalkan baru!
Instal NPM NPM Run Start
Server kemudian akan memulai. Anda dapat memeriksanya di https: // localhost: 8080.
Ini akan segera tercermin saat Anda bermain -main dengan saus.
Ini bisa jadi karena paket node-canvas tidak mendukung ARM64.
Coba masukkan simpul seperti x86_64.
Contoh pemasangan dengan asdf :
Arch -x86_64 ASDF Instal NodeJS <Version>
NPM Run Build
./dist akan dibuat saat Anda membangunnya. Anda dapat menggunakannya sebagai situs statis apa adanya.
NPM Run Lint
Secara otomatis mendeteksi guncangan dan perubahan lain dalam gaya pengkodean.
NPM Run Fix
Sebagian besar dapat dikoreksi secara otomatis.
Dianjurkan untuk berjalan sebelum mengirim tarik-rik.
Ini dirancang untuk secara otomatis membangun dan berbaris menggunakan tindakan GitHub.
Saat membangun, atur ROLLBAR_TOKEN atau GA4_TOKEN dalam rahasia github untuk memungkinkan pengumpulan kesalahan dan analisis pengguna.
src/animations/ ... berisi implementasi animasi individualcomponents/ ... berisi bagian UIconstants/ ... berisi konstantaeffects/ ... Berisi Efek Implementasifilters/ ... berisi implementasi filterfonts/ … Web Font Termasukparts/ ... berisi gambar bagian yang digunakan dalam "Pilih dari Bagian"samples/ ... berisi sampel yang digunakan dalam tutorialshaders/ ... berisi shader fragmen untuk digunakan dalam efek webglutils/ … berisi fungsi yang bergunawebgleffects/ ... berisi implementasi efek WebGLmegamoji.js … titik masuktypes.js … berisi definisi jenis seperti efekstatic/ ... html dll. berisi hal -hal yang dapat disampaikan sebagaimana adanya tanpa bangunan tertenturesources/ ... Ada item lain -lain yang tidak terkait dengan aplikasi, seperti gambar yang digunakan dalam dokumen. Anda dapat menemukan daftar di src/constants/filters.js .
Entitas filter adalah fungsi satu argumen.
HTMLImageElement akan dilewati, sehingga pemrosesan gambar dilakukan sesuai kebutuhan dan gambar yang sudah jadi dikembalikan sebagai bloburl.
Anda dapat menemukan daftar di src/constants/effects.js .
Efeknya adalah fungsi 5-argumen:
keyframectxcellWidthcellHeight Setelah latar belakang diisi, ctx tepat sebelum drawImage akan dilewati, jadi atur transformasi pilihan Anda, seperti transform , filter , dan clip . Karena beberapa efek dimaksudkan untuk digunakan bersama, hindari metode panggilan yang mengesampingkan efek yang ditambahkan oleh efek lain, seperti setTransform .
Juga, pastikan untuk menyesuaikan gambar yang memiliki beberapa gambar bermakna setidaknya di bingkai pertama sehingga emoji yang dibuat nyaman digunakan bahkan di lingkungan di mana animasi dinonaktifkan. Jika Anda ingin memeriksa bagaimana tampilan akan ditampilkan di lingkungan dengan animasi dinonaktifkan, pilih "Fix First Frame" di bawah "Tambah Efek" di bawah "Mode Crafter> Easing".
canvas yang melintasi empat kali lebih besar (dua kali panjang dan lebar) dari apa yang akhirnya akan diterjemahkan sebagai emoji.
+---------+
| | <- Margin untuk Cellheight / 4 | + ----+ |
| | | | <- Area menggambar untuk Cellheight / 2 | | | | | Bagian yang pada akhirnya akan digunakan dalam emoji | + ----+ |
| | <-Margin di CellHeight / 4+------------+
Misalnya, jika Anda ingin meluncur keluar emoji ke atas, cukup translate cellHeight / 2 (bukan cellHeight ) sudah cukup
Jika Anda ingin melihat seperti apa kanvas sebelum memotong margin, aktifkan "Jangan memotong margin" dalam "Mode Pengrajin> Mode Pengembang" di bawah "Tambah Efek".
===
Latar belakang spesifikasi:
Ketika efek sepertiびよんびよん(terutama menyusut) dan rotasi dapat digabungkan, Anda bahkan dapat melihat margin yang berada di luar kisaran yang awalnya digunakan sebagai emoji. Bahkan dalam kasus -kasus seperti itu, untuk membuat animasi terlihat indah, animasi diterjemahkan di luar kisaran yang pada akhirnya akan digunakan untuk emoji, dan kemudian margin dipotong nanti.
Sulit untuk dipahami, jadi saya berharap untuk melakukan sesuatu tentang hal itu, tetapi saya belum memikirkan cara yang baik.
Anda dapat menemukan daftar di src/constants/animations.js .
Entitas animasi adalah 5 fungsi argumen:
keyframeeffect_ )ctxeffect_ )imageoffsetHoffsetVwidthheightcellWidtheffect_ )cellHeighteffect_ ) Animasi sebenarnya membuat image gambar untuk kanvas yang telah melewati menggunakan ctx.drawImage atau serupa. Karena rentang tanaman yang mengatur pengguna berlalu sebagai offsetH, offsetV, width, height , dan rendering untuk kanvas biasanya sebagai berikut (dimungkinkan untuk tidak berani melakukannya sebagai bagian dari efek):
ctx . drawImage ( image , offsetH , offsetV , width , height , ... ) ;Kanvas diteruskan ke animasi, seperti efeknya, empat kali lebih besar dari yang sebenarnya output sebagai emoji.
+---------+
| | <- Margin untuk Cellheight / 4 | + ----+ |
| | | | <- Area menggambar untuk Cellheight / 2 | | | | | Bagian yang pada akhirnya akan digunakan dalam emoji | + ----+ |
| | <-Margin di CellHeight / 4+------------+
Misalnya, implementasi animasi no-no (cukup menggambar emoji pada ukuran normal di tengah layar) akan terlihat seperti ini:
ctx . drawImage ( ... , cellWidth / 4 , cellHeight / 4 , cellWidth / 2 , cellHeight / 2 ) ;Dibandingkan dengan efek, metode rendering lebih fleksibel karena memungkinkan Anda untuk mengimplementasikan metode rendering secara bebas (mis., Rendering dua lapisan dapat diimplementasikan untuk mengimplementasikan efek yang tidak dapat dicapai dengan transformasi sederhana). Namun, tidak akan lagi dimungkinkan untuk menggabungkannya dengan animasi lain, jadi harap pertimbangkan setidaknya sekali apakah Anda tidak dapat menerapkan efek yang sama dengan efek.
Juga, seperti halnya efek, pastikan Anda dapat menggunakan emoji yang Anda buat dengan nyaman bahkan di lingkungan di mana animasi dinonaktifkan.
Anda dapat menemukan daftar di src/constants/webgleffects.js .
Efek yang tidak dapat diimplementasikan hanya menggunakan fungsi transformasi dasar kanvas dapat diimplementasikan di WebGL.
Entitas Efek WebGL adalah fungsi empat argumen:
keyframecellWidthcellHeightMuat shader dan kembalikan dengan parameter yang sesuai.
// 例
import { webglLoadEffectShader , webglSetVec2 } from '../utils/webgl' ;
import fooShader from '../shaders/foo' ;
function webglZoom ( keyframe , _w , _h , args ) {
const program = webglLoadEffectShader ( fooShader ) ;
webglSetVec2 ( program , 'center' , keyframe , 0.5 ) ;
return program ;
} Shader dapat ditemukan di src/shaders (Anda dapat menambahkannya).
Jika Anda ingin menambahkannya, ada fungsi pembungkus yang disebut webglEffectShader , jadi silakan buang kode GLSL mentah ke dalamnya.
const myShader = webglEffectShader ( `
<GLSL code>
` ) ; Fungsi yang umum digunakan (seperti bilangan pseudo-acak) dapat ditemukan di src/shaders/utils .
Seperti biasa, gambar diterjemahkan dalam ukuran 4x.
Juga, seperti biasa, berhati -hatilah untuk memastikan bahwa emoji yang dibuat nyaman digunakan bahkan di lingkungan di mana animasi dinonaktifkan.
Hati -hati karena akan memuat secara perlahan.
Font berikut tidak termasuk:
Silakan periksa lisensi font dengan cermat (dapat didistribusikan kembali? Bisakah dimodifikasi (WOFF)?), Dan kemudian tempatkan font yang telah diubah menjadi Woff di src/fonts .
Pada prinsipnya, font yang dilisensikan di bawah lisensi font terbuka SIL tidak menggunakan lisensi apa pun yang berisi "dengan nama font yang dipesan ..." (karena merupakan kerumitan untuk mengubah nama font saat membuatnya woff).
Untuk membuat Woff, saya menggunakan ini: https://github.com/zk-phi/woff2sfnt-sfnt2woff.
node sfnt2woff.js hoge.ttf hoge.woff
Setelah Anda menambahkan font, perbarui kedua file.
src/constants/fonts.tsLICENSE.markdownAlih -alih membawa nama penulis saat menulis lisensi, silakan cari nama resmi dan salin sebanyak mungkin.