आपको या तो आकार बदलने के बाद कैनवास को कैनवास का आकार बदलना या कैनवास को फिर से बनाना होगा।
आप कैनवास की सामग्री के बचाने के लिए और यह पुनः बनाने चाहते हैं, मैं कुछ ही विकल्प के बारे में सोच सकते हैं:
- उपयोग
context.getImageData
पूरे कैनवास हड़पने के लिए, कैनवास का आकार बदलने के लिए, तो context.putImageData
का उपयोग यह पुनः बनाने का नए पैमाने पर।
Image
ऑब्जेक्ट बनाएं, canvas.toDataUrl()
के परिणामस्वरूप स्रोत सेट करें, कैनवास का आकार बदलें, फिर छवि को नए पैमाने पर खींचें।
context.setScale(xscale, yscale)
पर कॉल करें और मूल रूप से कैनवास को आकर्षित करने के लिए उपयोग किए जाने वाले फ़ंक्शन को कॉल करें। मान लें कि आप xscale
और yscale
सही तरीके से सेट अप करते हैं, यह स्वचालित रूप से सभी आकार को नए आकार में स्केल करेगा।
- अद्यतन आकार के साथ एक नया कैनवास बनाएं और पुराने कैनवास को नए पर कॉपी करने के लिए
context.drawImage(oldCanvas, ...)
पर कॉल करें। फिर आप पुराने कैनवास को नए के साथ बदल देंगे।
यदि आप किसी भिन्न डोमेन से किसी भी समय कैनवास में कोई छवि खींच चुके हैं, तो पुराने दो विकल्प काम नहीं करेंगे, और पुराने कार्यान्वयन द्वारा समर्थित नहीं हैं।
मेरी राय में, विकल्प 3 (नए पैमाने पर छवि को दोबारा तैयार करना) यदि संभव हो तो सबसे अच्छा है। यह एकमात्र विकल्प है जो आपकी लाइनों को पूरी तरह से चिकनी और तेज रखेगा, और यह हमेशा काम करेगा (माना जाता है कि आपके पास छवि उत्पन्न करने के लिए अभी भी सारी जानकारी है)।
स्रोत
2010-08-22 23:31:06
धन्यवाद। दुर्भाग्य से मैं मूल डेटा को फिर से नहीं चला सकता क्योंकि यह उपयोगकर्ता उत्पन्न हुआ है। तो मैं विकल्प 1 के लिए गया। –
आपके बिंदु 1 में थोड़ा सुधार। यह इमेजडेटा है, सेट इमेजडेटा नहीं है। –
मैंने उपयोग किया: var imgD = ctx.getImageData (0, 0, canvas.width - 1, canvas.height - 1); ctx.putImageData (imgD, 0, 0); –