2012-09-23 7 views
8

मैं आईओएस 6 पर सफारी मोबाइल पर कैनवास पर एक फ़ाइल रीडर ऑब्जेक्ट के साथ लोड की गई स्थानीय छवि प्रस्तुत करने का प्रयास करता हूं। लेकिन डेटा-यूआरएल के साथ हर छवि लंबवत पैमाने पर प्रदान की जाती है। क्या यह एक बग है? क्रोम पर यह सही ढंग से प्रस्तुत किया जाता है।मोबाइल सफारी <img src="data:image/jpeg;base64..."> कैनवास पर स्केल किया गया है?

ScreenShot from iOS6 (ऊपर: कैनवास, नीचे: मूल छवि)

वहाँ किसी भी तरह से काम के आसपास करने के लिए इस बग है? क्या यह एक बग है?

यदि मैं पहले "फोटोविज़ार्ड" ऐप (इसे 720px चौड़ाई तक स्केल करता हूं) के साथ डिवाइस पर छवि का आकार बदलता हूं, तो कैनवास इसे सही ढंग से प्रस्तुत करता है। ,

Jake Archibald से कोशिश सुझाव थोड़ा बेहतर लग रहा है, लेकिन अभी भी खड़ी बढ़ाया जाता है:: यह कैमरा एप्लिकेशन से लिया चित्र आकार या छवियों के साथ एक समस्या लगती है

मैंने आज एंड्रॉइड 4.1.1 के साथ गैलेक्सी नेक्सस पर इसे आजमाया। उम्मीद की तरह काम करता है, तो यह वास्तव में एक मोबाइल सफारी मुद्दे की तरह दिखता है:

+0

जेएस में एक छवि का आकार बदलने का प्रयास करते समय मुझे सिमुलेटर चीजें मिली हैं – NimmoNet

+0

कोई कामकाज? मैंने "ऑनलोड" के बीच पांच सेकंड देरी जोड़ने और छवि w/h प्राप्त करने और कैनवास पर इसे प्रस्तुत करने का प्रयास किया। इसे ठीक नहीं किया मैंने कैनवास पर छवि को प्रस्तुत करने से पहले "requestAnimationFrame" के बारे में भी सोचा था, इसे ठीक नहीं किया था। –

+0

इस तरह एक ब्लॉब यूआरएल का उपयोग करने का प्रयास किया: window.URL.createObjectURL (फ़ाइल) ... और इसे img.src में लोड करें, उसी विफलता में परिणाम, "ब्लॉब-src" के साथ एक छवि को प्रस्तुत करने से लंबवत रूप से स्केल किया जाता है कैनवास –

उत्तर

29

यह प्रतिबंध जो आईओएस सफारी संसाधन सीमा में रहता है से संबंधित हो सकता है। निम्नलिखित लिंक के अनुसार, 2 एम पिक्सेल से अधिक जेपीईजी फाइलों को कम किया जाएगा।

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html#//apple_ref/doc/uid/TP40006482-SW15

मैं सफारी में है कि कैनवास पर शक कर रहा हूँ सही ढंग से इस सबसैम्पलिंग के साथ सौदा नहीं कर सकते।

मैंने कुछ कामकाज बनाया है यह पता लगाने के लिए कि छवि subsampled है या नहीं और इसे मूल आकार में खींच रहा है।

https://github.com/stomita/ios-imagefile-megapixel

+0

पर उपरोक्त लाइब्रेरी का उपयोग करते समय, आपका नमूना इस तरह बन जाता है: http://jsbin.com/aqirel/13 मेरे आईफोन 5 (आईओएस 6.0) के साथ ठीक है। – stomita

+1

मैंने अभी लिखा है कि एक और फ़ाइल अपलोड विजेट का एक ऑनलाइन डेमो बनाया। यह आईओएस प्रतिपादन समस्या का पता लगा सकता है। यदि छवि सही ढंग से प्रस्तुत नहीं की गई प्रतीत होती है, तो छवि को लागू फ़िक्स के साथ फिर से प्रस्तुत किया जाता है। दो पैमाने पर वाई स्केल को दोबारा ठीक करने के लिए लगता है, विवरणों के लिए स्रोत देखें ... http://sandbox.juurlink.org/html5imageuploader/ –

+0

@stomita मैंने आपकी लाइब्रेरी का उपयोग किया और जब यह ऊर्ध्वाधर ऊंचाई मुद्दा तय करता है, तो छवि है बहुत खराब/कम संकल्प में दिखा रहा है। क्या आप जानते हैं कि संकल्प को बनाए रखने के लिए मैं कैसे upscale होगा? –

0
var cnv = document.createElement("canvas"); 
     ctx = cnv.getContext("2d"); 

     image = new Image(); 

     image.src = src; 

     image.onload = function() { 

      var size = scaleSizeRatio(image.width,image.height); 
      cnv.width = size[0]; 
      cnv.height = size[1]; 
      ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, image.width , image.height); 

      var div = container; 
      div.appendChild(cnv);  

     } 

ctx.drawImage (छवि, 0, 0, image.width, image.height, 0, 0, image.width, image.height); यह फ़ंक्शन 3 एमबी से अधिक आईपॉड में निचोड़ने वाली समस्या को ठीक करेगा। सबसे पहले यदि आपकी छवि 3 एमबी से अधिक है तो छवि के लिए स्केल की गई चौड़ाई और ऊंचाई की गणना करें और उस चौड़ाई और ऊंचाई को कैनवास पर सेट करें। फिर drawImage फ़ंक्शन को कॉल करें। यह आपको अंतिम छवि देगा जो आपको अपेक्षित था ...

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