2013-12-13 12 views
6

यदि मैं नेटवर्क के माध्यम से एक साधारण छवि स्थानांतरित करता हूं, तो यह तेज़ है। जब मैं toDataURL का उपयोग कर कैनवास में बनाई गई एक ही छवि को स्थानांतरित करने का प्रयास करता हूं तो यह बहुत धीमा होता है। क्यूं कर?क्यों ToDataURL इतना धीमा है?

+1

नहीं पर्याप्त जानकारी:

इस मामले में, जेपीईजी इस तरह से निर्दिष्ट करें। – akonsu

+0

अनुकूलन? उत्पन्न छवि की तुलना में नियमित छवि का वजन कितना होता है? – Boaz

+0

'हस्तांतरण' को परिभाषित करें – charlietfl

उत्तर

8

आप सामान्य रूप में तो बहुत ज्यादा संदर्भ दे रही है नहीं कर रहे हैं:

जब आप toDataURL() का उपयोग ब्राउज़र एक छोटे से शीर्ष लेख के साथ एक बेस-64 धारा के रूप में छवि सांकेतिक शब्दों में बदलना होगा। गैर-एन्कोडेड आकार की तुलना में आधार -64 हमेशा आकार को 33% तक बढ़ा देगा।

यदि आप मूल रूप से एक जेपीईजी एन्कोडेड फ़ाइल स्थानांतरित कर रहे हैं तो यह आमतौर पर छवि के पीएनजी संस्करण की तुलना में आकार में छोटा होगा। यदि आप toDataURL के लिए छवि प्रकार निर्दिष्ट करना भूल जाते हैं तो ब्राउज़र हमेशा पीएनजी के लिए डिफ़ॉल्ट होगा।

var quality = 0.7; 
var dataUri = canvas.toDataURL('image/jpeg', quality); 
+0

प्रश्न का पालन करें। प्रदर्शन के संदर्भ में डेटास्टरी को स्थानीय स्टोरेज कहने के लिए क्या कोई नुकसान है? – JohnAndrews

+1

@ जॉन एंड्रयूज प्रदर्शन के लिए नहीं (ओवरहेड अभी भी वहां होगा), लेकिन डेटा-यूरी की आवश्यकता होगी क्योंकि स्थानीय सॉरेज केवल स्ट्रिंग लेता है। लेकिन स्टोरेज * स्पेस * आसानी से एक मुद्दा बन जाएगा। इंडेक्सड डीबी इस आईएमएचओ के लिए बेहतर विकल्प है और यह ब्लॉब्स स्टोर कर सकता है। – K3N

+0

आह यह था कि, मुझे लगता है कि यह इनपुट छवि के लिए डिफ़ॉल्ट होगा, जेपीजी चीजों को तेजी से धन्यवाद दोस्त बदल रहा है! 'Canvas.toBlob' को लागू करने के लिए क्रोम की प्रतीक्षा कर रहे हैं, इसलिए यह भी तेज और गैर-अवरुद्ध हो सकता है –

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