2017-04-26 17 views
6

प्रोजेक्ट के लिए मैं काम कर रहा हूं मुझे इमोजी (आदर्श ऐप्पल इमोजी) से एक छवि फ़ाइल जेनरेट करने की आवश्यकता है। मैंने सोचा कि यह एक काफी साधारण बात होनी चाहिए, लेकिन प्रत्येक उपकरण का उपयोग करने के साथ, मैं अंत में एक दीवार में भाग जाता हूं।इमोजी से पीएनजी या जेपीजी नोड.जेएस में - कैसे करें?

मैंने this one जैसे इमोजी सेट के साथ काम करने पर भी विचार किया है, जब आवश्यक हो तो मैं क्वेरी कर सकता हूं। दुर्भाग्य से, जिस व्यक्ति से मैंने लिंक किया है, उसके पास यूनिकोड 9.0 इमोजी नहीं है जैसे एवोकैडो() झींगा() या हरमबे()। क्या आप इस तरह के एक अद्यतित सेट के बारे में जानते हैं?

कोड-वार, मैंने opentype.js को आजमाया है, लेकिन यह .ttc फोंट का समर्थन नहीं करता है, जो मेरे मैक (ऐप्पल कलर इमोजी.एटीसी) पर इमोजी फ़ॉन्ट का विस्तार है। मैं .ttf के लिए फ़ॉन्ट परिवर्तित कर दिया है, लेकिन है कि या तो काम नहीं किया:

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() + '" />'); 
     } 
    }); 

परिणाम इस प्रकार है:

The result looks like this:

मैं कोशिश की है fontkit, जो माना जाता है होना करने के लिए .ttc फ़ाइलों को पढ़ने में सक्षम है, लेकिन अगर मैं ऐप्पल कलर इमोजी फ़ॉन्ट का उपयोग करने का प्रयास करता हूं तो यह एक त्रुटि फेंकता है।

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

अगर मैं अपने परिवर्तित .ttf फ़ाइल मैं कुछ गलत svg साथ अंत के साथ एक ही कोशिश:

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 

मेरा प्रश्न है, मैं भी इस सही तरीके से आ रहा है? इमोजी को कनवर्ट करना जो कि मेरे पास पहले से ही मेरी मशीन पर एक .png या किसी अन्य प्रारूप में है, ऐसा लगता है जो काफी सरल होना चाहिए लेकिन मैं इसे काम पर नहीं ला सकता हूं।

संपादित करें:

मैं (rodrigopolo को बड़ा shoutouts) this repo में अपने हेक्स कोड से इमोजी नामों की एक सूची मिल गया है। अब मैं इसका उपयोग कर सकता हूं:

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

फिर भी, यह जानना बहुत अच्छा होगा कि किसी के पास इस समस्या का कोडिंग समाधान है या नहीं!

को और संपादित:

पहला समाधान मैं केवल शामिल पाया है बाहर कर देता है इमोजी यूनिकोड 8.0 अप करने के लिए, यूनिकोड नहीं 9.0। मुझे एक रूबी मणि gemoji मिला है जो इमोजी निष्कर्षण करता है। यदि आप एक गहरे लाल रंग का डेवलपर (मैं नहीं कर रहा हूँ) नहीं हैं, तो आप बस अपने शेल में निम्न आदेश का उपयोग कर सकते हैं:

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

अब आप अपने कुछ-निर्देशिका/इमोजी फ़ोल्डर में यूनिकोड 9.0 इमोजी है!

+0

यह एक बेहद गूढ़ समस्या (+1) जैसा लगता है। जिज्ञासा से, आपको इमोजी से बाहर एक छवि बनाने की ज़रूरत क्यों है? – Dragomok

+1

हाहा, हाँ, शायद मुझे समाधान खोजने में इतना कठिन समय क्यों था। मैं एक प्रतिक्रिया परियोजना के साथ प्रयोग कर रहा हूं जहां मैं इसे एक अलग .env फ़ाइल के साथ बनाकर वेबसाइट के रूप में बदल सकता हूं। मैंने फेविकॉन को इमोजी होने का फैसला किया है इसलिए मुझे .env में निर्दिष्ट इमोजी के आधार पर गतिशील रूप से उत्पन्न करने का एक तरीका चाहिए।लेकिन रोजमर्रा के उपयोग के लिए, आप उन उपकरणों पर नवीनतम इमोजी प्रदर्शित करने के लिए इसका उपयोग कर सकते हैं जो अभी तक उनका समर्थन नहीं करते हैं। – user2634633

+1

फ़ॉन्टकिट ने टीटीसी का समर्थन किसने कहा? क्योंकि यह बिल्कुल नहीं करता है। अपने टीटीसी को * वास्तविक * फ़ॉन्ट फ़ाइलों में अनपैक करें, फिर छवि उत्पादन के लिए उन लोगों का उपयोग करें। साथ ही, यदि आपको कोई समाधान मिला है तो उसे "संपादित करें" के रूप में नहीं जोड़ना, एक उत्तर लिखें और फिर एक दिन बाद इसे स्वीकार करें। उत्तर के बिना प्रश्न Google अनुक्रमणित की बजाय, समय पर खोने जा रहे हैं। –

उत्तर

3

मैं फ़ॉन्ट संग्रह से फ़ॉन्ट का चयन करके फ़ॉन्टकिट के साथ काम करने में सक्षम था। मुझे अभी तक कोई मामला नहीं मिला है जहां "ऐप्पल कलर इमोजी.एटीसी" में शामिल टीटीएफ में से किसी एक का उपयोग अलग-अलग परिणाम देता है।

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

बिल्कुल वही जो मैं खोज रहा था! सादगी के लिए मैं सिर्फ 'नोड-इमोजी' निर्भरता को हटा दूंगा: 'run = font.layout (' '); '। – user2634633

+0

साथ ही, ध्यान 'getImageForSize' समारोह रखने के लिए एक बात पिक्सल में इमोजी छवि हो जाता है, और यह एप्पल रंग इमोजी के लिए अधिकतम आकार की तरह दिखता है 160 है। – thebenmiller

संबंधित मुद्दे