ইউআইআইমেজ থেকে অন্তর্নিহিত এনএসডিটা পান


104

আমি ব্যবহার বা পদ্ধতি UIImageথেকে তৈরি করতে পারি । NSData[UIImage imageWithData:][UIImage initWithData:]

আমি ভাবছি যদি আমি NSDataকোন বিদ্যমান থেকে ফিরে পেতে পারি UIImage? লাইনে কিছুNSData *myData = [myImage getData];

উত্তর:


191
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality

অথবা

NSData *imageData = UIImagePNGRepresentation(image);

আপনি যদি পিএনজি ফর্ম্যাট বা জেপিজি ফর্ম্যাটে আপনার ডেটা চান তা নির্ভর করে।


82
আমি জানি না কেন এই উত্তরটি এতবার আপ-ভোট দেওয়া হয়েছে বা এটি গৃহীতও নয়। ওপিতে প্রাথমিকভাবে দেওয়া তথ্য পুনরুদ্ধার করতে বলেছিল। ব্যবহার UIImageJPEGRepresentationবা UIImagePNGRepresentation হবে তথ্য পরিবর্তন এবং একটি reconversion না। যা চেয়েছিল তা অর্জন করার কি কোনও উপায় আছে?
প্যাট্রিক

6
এই উত্তরটি কোনও ভাল নয়, কারণ এটি ইতিমধ্যে ক্ষতির বিন্যাসে থাকলে চিত্রের গুণমানটি হ্রাস পাবে।
1dayitwillmake

@ সিফারকম আমি দেখতে পাচ্ছি আপনি সঠিক তথ্য ফিরে চাওয়ার বিষয়ে কী বলছেন। তবে, আমি মনে করি যে সংখ্যাগরিষ্ঠ লোকেরা প্রশ্ন আসে, তাদের উত্তরগুলির জন্য এই উত্তরটি নিখুঁত হবে ... সুতরাং উন্নতিগুলি। আপনি যদি আসল তথ্য ফিরে পাওয়ার জন্য কোনও উত্তর পেয়ে থাকেন তবে দয়া করে ভাগ করুন;)
tybro0103

@ 1dayitwillmake এমনকি পিএনজি রেপ? আমার দক্ষতার ক্ষেত্র নয়, তবে আমি ভেবেছিলাম পিএনজির ক্ষতি হয় না?
tybro0103

@ Bob Spryn এটি সাহায্য করবে না। বৈশিষ্ট্য সিআইআইমেজ কেবল তখনই সেট করা থাকে যদি এটি চিত্রের সাথে ইনিশিয়াল করা হয় উইথ সিআইআইমেজ :. এছাড়াও এটি সরাসরি ব্যবহৃত ডেটা নয় বরং অন্য চিত্রের উপস্থাপনা অবজেক্ট।
কিং-উইজার্ড

21

যখন কোনও UIImageবস্তুর সাথে আরম্ভ করার সময় init(data: originalData), এটি originalDataকোনও ধরণের অভ্যন্তরীণ বিন্যাসে কাঁচা ডেটাতে রূপান্তরিত হবে। এই ডেটা পরে সঙ্গে পুনরুদ্ধার করা যেতে পারে

let rawData = myImage.cgImage?.dataProvider?.data as Data?

তবে rawDataএটি কাঁচা হওয়ায় এটি ব্যবহারের চেয়ে আরও বড় হতে চলেছে UIImagePNGRepresentation


আমি কীভাবে এটি উদ্দেশ্য-সি
h3dkandi

এনএসডাটা * কাঁচাডাটা = (__ব্রীজ এনএসডাটা *) সিজিডেটাপ্রভাইডারকপিডাটা (সিজিআইমেজগেটডাটাপ্রভাইডার (চিত্র.সিজিআইমেজ));
জারদোজস্পেস

@ জর্দোজস্পিকে এই উত্তরের সম্পাদনা হিসাবে অন্তর্ভুক্ত করার জন্য আপত্তি-সি বৈকল্পিক পুরোপুরি কার্যকর।
কামিল.এস

6

আপনি আশা করতে পারেন যে কোনও ইউআইআইজেজ হ'ল একটি বস্তু যা প্রদর্শনের জন্য ফর্ম্যাট করা হয়েছে এবং তাই এটি মূল ডেটা (যা সম্ভবত পিএনজি বা জেপিইজি ফর্ম্যাটে রয়েছে) ব্যবহার করবে না তবে সম্ভবত পিক্সেল অ্যারে বা কিছু অন্যান্য অভ্যন্তরীণ ফর্ম্যাট থাকবে। অন্য কথায়, UIImage(data: foo)ধরে রাখা হবে না foo

  1. আপনি যদি এটি কেবল আপনার প্রোগ্রামের অন্য কোথাও ব্যবহার করতে চান তবে মূল UII छविটি ঠিকঠাক করবে (আমি মনে করি এটি আসলে এখানে নয়)

  2. আপনি যদি সিরিয়াল করতে চান UIImagePNGRepresentation(...)তবে কাজ করবে তবে মূলটি যদি জেপিইজি হত তবে তা বড় করা হবে; UIImageJPEGRepresentation(...)আপনার অরিজিনাল পিএনজি হলে প্রায়শই কিছুটা ওভারসাইজ ডেটা হয়ে যায় এবং কিছুটা ক্ষতি হয়। চিত্রটি প্রদর্শিত হবে এবং আপনি যে ফর্ম্যাটটি সরবরাহ করবেন বলে আশা করছেন তার ভিত্তিতে একটি চয়ন করা ঠিক হবে should আপনি যদি পিএনজি ব্যবহার করছেন এবং পিএনজি বের করতে চান তবে আপনার ভাল ফাইলের আকার এবং প্রায় অভিন্ন ডেটা, বিশেষ পিএনজি খণ্ডগুলি আলাদা করে রাখা উচিত।

  3. আপনি যদি মূল ডেটাটির সঠিক অনুলিপি পেতে চান (সম্ভবত থাম্বনেইলিংয়ের পরে কোনও ফাইল সংরক্ষণ করতে পারেন, বা এটি SHA1), তবে আপনাকে এটি আলাদাভাবে ধরে রাখতে হবে। আপনি যেমন কিছু করতে পারেন:

    var image:UIImage
    var imageData:NSData {
        didSet {
            image = UIImage(data: imageData)
        }
    }

4

আমি কারণেই এই হোঁচট খেয়েছি এবং আমি দ্রুত পছন্দ করি :)

ক্যারোলিন পোস্টের দ্রুত অনুবাদ এখানে দেওয়া হল।

var imageData = UIImagePNGRepresentation(image)

অথবা

var imageData = UIImageJPEGRepresentation(image, 0.7) 

প্রশ্ন ছিল না দ্রুত।
ক্রস_

3

সুইফট 4.2

let dataPng = image.pngData() // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format

let dataJpg = image.jpegData(compressionQuality: 1) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)

-2

উপরের উত্তর দেওয়ার পর থেকে জিনিসগুলি পরিবর্তিত হয়েছে, এখনও যারা খুঁজছেন তারা সিফারকমের উদ্বেগকে ভাগ করে নিচ্ছেন: আইওএস 5 সিআইআইমেজ সম্পত্তি যুক্ত করেছে ।


অন্তর্নিহিত এনএসডাটা পাওয়ার জন্য আমি সিআইআইমেজ ব্যবহার করার কোনও উপায় দেখছি না ... আমি কি কিছু মিস করছি?
tybro0103

4
এই সাহায্য করবে না। সম্পত্তিটি কেবল CIImageতখনই সেট করা থাকে যদি এটি দিয়ে শুরু করা হয়েছিল imageWithCIImage:। এছাড়াও এটি সরাসরি ব্যবহৃত ডেটা নয় বরং অন্য চিত্রের উপস্থাপনা অবজেক্ট।
প্যাট্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.