2017-04-26 17 views
6

Üzerinde çalıştığım proje için emoji'den bir görüntü dosyası oluşturmalıyım (ideal olarak Apple emoji). Oldukça basit bir şey olmalı diye düşündüm, ama kullandığım her bir araçla, sonunda bir duvara koşuyorum.Emoji, Node.js'de PNG veya JPG'ye - nasıl yapılır?

Ayrıca gerektiğinde sorgulayabildiğim this one gibi bir emoji seti ile çalışmayı düşündüm. Ne yazık ki, ben bağlandığım bir avokado() karides() veya harambe() gibi Unicode 9.0 emoji yok. Bu kadar güncel bir set biliyor musunuz?

Code-wise, opentype.js'yi denedim, ancak Mac'te (Apple Color Emoji.ttc) emoji fontunun uzantısı olan .ttc fontlarını desteklemiyor. Ben .TTF yazı tipini çevirdik ama bu da işe yaramadı:

var opentype = require('opentype.js'); 
    opentype.load('./build_scripts/apple_color_emoji.ttf', function (err, font) { 
     if (err) { 
      alert('Could not load font: ' + err); 
     } else { 
      console.log("loaded the font",font); 

      var Canvas = require('canvas') 
      , Image = Canvas.Image 
      , canvas = new Canvas(200, 200) 
      , ctx = canvas.getContext('2d'); 
      var path = font.getPath('', 0, 150, 72); 
      path.draw(ctx); 
      console.log('<img src="' + canvas.toDataURL() + '" />'); 
     } 
    }); 

sonuç şuna benzer: gerekiyordu

The result looks like this:

denedim fontkit olmak .ttc dosyalarını okuyabiliyor, ancak Apple Color Emoji yazı tipini kullanmaya çalışırsam bir hata atar. Ben bazı yanlış svg ile bitirmek benim dönüştürülen Ttf dosyası ile aynı çalışırsanız

var fontkit = require('fontkit'); 
    var font = fontkit.openSync('./build_scripts/Apple Color Emoji.ttc'); 
    // TypeError: font.layout is not a function 

:

var fontkit = require('fontkit'); 
    var font = fontkit.openSync('./build_scripts/apple_color_emoji.ttf'); 
    var run = font.layout(''); 
    var svg = run.glyphs[0].path.toSVG(); 

    console.log(svg); 
    // M-1 0ZM799 800Z 

Sorum, ben bile bu doğru yol yaklaşıyorum edilir? Makinemde zaten bulunan emoji'yi .png veya başka bir formata dönüştürmek, oldukça basit olması gereken bir şeye benziyor ama işe yaramayacağım.

DÜZENLEME: (rodrigopolo için büyük shoutouts) this repo kendi onaltılık kodlarına göre emojisi isim listesini buldum

. Şimdi sadece bu kullanabilirsiniz:

Hala
var emoji = "".codePointAt(0).toString(16); //1f60a 
var emojiFile = fs.readFileSync('./my-emoji-folder/' + emoji + '.png'); 

, birileri bu soruna bir kodlama çözümü vardır olmadığını bilmek harika olurdu!

FAZLA DÜZENLEME:

emojisi Unicode 8.0 kadar sadece dahil bulunamadı ettik ilk çözüm Meğerse 9.0 Unicode değil. Emoji çıkarma yapan bir yakut mücevher gemoji buldum. Bir yakut geliştirici (ben değilim) değilseniz, basitçe kabuğunda aşağıdaki komutları kullanabilirsiniz:

git clone https://github.com/github/gemoji.git 
cd gemoji 
bundle install 
bundle exec gemoji extract some-directory/emoji 

Artık bazı-dizin/emojisi klasöründe Unicode 9.0 emoji'yi var!

+0

Bu son derece ezoterik bir problem gibi görünüyor (+1). Merak etme, neden emoji dışında bir görüntü yaratmanız gerekiyor? – Dragomok

+1

Haha, evet, bu yüzden bir çözüm bulmakta çok zorlandım. Web sitesinin görünümünü değiştirerek farklı bir .env dosyası oluşturarak bir tepki projesi üzerinde deney yapıyorum. Favicon'u bir emoji olmaya karar verdim, bu yüzden .env'de belirtilen emoji'ye bağlı olarak bunları dinamik olarak üretmenin bir yoluna ihtiyacım vardı.Ancak daha günlük kullanım için, henüz onları desteklemeyen cihazlardaki en son emojiyi görüntülemek için kullanabilirsiniz. – user2634633

+1

Font seti TTC'yi destekledi kim? Çünkü kesinlikle değil. TTC'nizi * gerçek * yazı tipi dosyalarını paketinden çıkarın, daha sonra bunun yerine görüntü üretimi için kullanın. Ayrıca, bir çözüm bulduysanız, bunu bir "düzenleme" olarak eklemeyin, bir cevap yazın ve bir gün sonra bunu kabul edin. Cevapsız sorular google endeksli yerine zaman kaybettirecek. –

cevap

3

Yazı tipi koleksiyonundan bir yazı tipi seçerek fontkit ile çalışabildim. "Apple Color Emoji.ttc" ye dahil olan TTF'lerden herhangi birini kullanmanın farklı sonuçlar verdiği henüz bir vaka bulamadım.

const fs = require('fs'); 
const fontkit = require('fontkit'); 
const emoji = require('node-emoji'); 
const font = fontkit.openSync('./Apple Color Emoji.ttc').fonts[0]; 

let emo = emoji.get('100'); 
let run = font.layout(emo); 
let glyph = run.glyphs[0].getImageForSize(128) 

fs.writeFileSync('100.png', glyph.data); 
+0

Tam olarak aradığım şey! Basitlik uğruna “node-emoji” bağımlılığını kaldırırım: 'run run = font.layout ('');'. – user2634633

+0

Ayrıca, "getImageForSize" işlevinin akılda tutulması gereken bir şey, pikseldeki emoji görüntüsünü alır ve Apple Color Emoji'nin maksimum boyutu 160 gibi görünür. – thebenmiller

İlgili konular