ios - Scale an image to a given NSData byte size - PNG compression -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 5 जवाब
अगर मेरे पास एक UIImage और मैं एनएसडीएटा में कनवर्ट करता हूं, मैं देख सकता हूं कि यह कितने बाइट्स है।
यदि मेरे पास एक वैरिएबल मुझे पता है कि वर्तमान बाइट आकार कैसे प्राप्त करें लेकिन जब मैं इसे चौड़ाई पर 50% और ऊंचाई पर 50% (25% शुद्ध-कुल) नए गाया स्केल छवि के अंतिम बाइट (जब इसे पीएनजी में परिवर्तित किया जाता है क्या किसी दिए गए बाइट आकार में छवि का आकार बदलने का कोई तरीका नहीं है? required size
है और मैं इसे एक निश्चित लम्बाई और चौड़ाई में सेट करना चाहता हूं ताकि जब इसे एक पीएनजी फाइल एनएसडीटा UIImagePNGRepresentation () के रूप में प्रदान किया जाता है;
यह एक निश्चित बाइट-आकार ( आवश्यक साइज़ ) है।
[NSData length मुझे पता है कि एक UIImage को कम करने के लिए कैसे करें (यदि कोई बेहतर तरीका है तो कृपया मुझे बताएं)
// UIImage * tempImage = whateverTheImagePointerIs; पूर्णांक tempWidth = tempImage.size.width / 2; // 50% चौड़ाई की मूल पूर्णांक tempHeight = tempImage.size.height / 2; // मूल UIImageView की 50% ऊंचाई * tempImageRender = [[UIImageView alloc] initWithFrame: CGRectMake (0 , 0, tempWidth, tempHeight)]; TempImageRender.image = tempImage; UIGraphicsBeginImageContextWithOptions (tempImageRender.bounds.size, tempImageRender.opaque, 1.0); [TempImageRender.layer renderInContext: UIGraphicsGetCurrentContext ()]; UIImage * tempFinalImage = UIGraphicsGetImageFromCurrentImageContext (); UIGraphicsEndImageContext ();
UIImagePNGRepresentation ();
) का उपयोग मूल बाइट्स का 25% नहीं है ... यह सिर्फ यादृच्छिक (मुझे यकीन है कि यह हो रहा है क्योंकि पीएनजी संपीड़न एल्गोरिदम छवि गुणवत्ता / आकार के साथ बदलते हैं।)
एक छवि को काफी प्रभावी ढंग से कैसे स्केल करें:
जैसा कि आपने पाया है, जब वास्तव में संकुचित होने पर छवि आकार और डेटा आकार के बीच कोई प्रत्यक्ष संबंध नहीं है, तो आपको बस करना होगा यह फिर से है:
- (एनएसडीटा *) png रेपेरेसेक्शन विथ मैक्ससिज़: (एनएसआईएनटेगर) मैक्ससिज़ {UIImage * image = self; जबकि (1) {एनएसडीटा * डेटा = UIImagePNG प्रतिचित्रण (छवि); यदि (डेटा. लैंफ़ & lt; maxSize) रिटर्न डेटा; CGSize आकार = image.size; छवि = [UIImage imageScaledToSize: CGSizeMake (image.size.width / 2., image.size.height / 2.)]; } वापसी शून्य; }
ध्यान दें कि मुझे लगता है कि आप संदर्भित स्केलिंग कोड को यूआईमेज पर एक श्रेणी पद्धति में बदलने के लिए और उपरोक्त विधि को UIImage श्रेणी में भी डालते हैं।
Comments
Post a Comment