গত কয়েক সপ্তাহ ধরে আমি উদ্দেশ্য-সিতে চিত্র নিয়ে কাজ করছি এবং প্রচুর অদ্ভুত আচরণ লক্ষ্য করছি। প্রথমত, অন্যান্য অনেক লোকের মতো আমারও এই সমস্যাটি হচ্ছে যেখানে ক্যামেরা সহ ছবি তোলা হয়েছে (বা অন্যের ক্যামেরায় তোলা ছবি এবং আমার কাছে এমএমএস ছিল) 90 ডিগ্রি ঘোরানো হয়। আমি নিশ্চিত ছিলাম না কেন বিশ্বে এটি ঘটছে (তাই আমার প্রশ্ন ) তবে আমি প্রায় সস্তা কাজ নিয়ে আসতে সক্ষম হয়েছি।
আমার প্রশ্ন এখন কেন এমন হচ্ছে ? অ্যাপল কেন ঘোরানো চিত্র? আমি যখন আমার ক্যামেরার সাথে ডান দিকের উপরে কোনও ফটো তুলি, যদি না আমি উপরে উল্লিখিত আমার কোডটি সম্পাদন করি, যখন আমি ফটোটি সংরক্ষণ করি তখন এটি ঘোরানো হয়। এখন, আমার কর্মসংস্থান কিছুদিন আগে পর্যন্ত ঠিক ছিল।
আমার অ্যাপ্লিকেশনটি একটি চিত্রের পৃথক পিক্সেল, বিশেষত একটি পিএনজির আলফা চ্যানেল সংশোধন করে (যাতে কোনও জেপিইজি রূপান্তর আমার দৃশ্যের জন্য উইন্ডো থেকে ছিটকে যায়)। কিছু দিন আগে আমি লক্ষ্য করেছি যে চিত্রটি আমার কার্যতালিকা কোডের জন্য আমার অ্যাপ্লিকেশনটিতে সঠিকভাবে প্রদর্শিত হয়েছে, যখন আমার অ্যালগোরিদম চিত্রের পৃথক পিক্সেলকে সংশোধন করে, মনে হয় চিত্রটি ঘোরানো হয়েছে। সুতরাং চিত্রের শীর্ষে পিক্সেলগুলি পরিবর্তনের পরিবর্তে এটি চিত্রের পাশের পিক্সেলগুলি সংশোধন করে (কারণ এটি মনে করে যে এটি ঘোরানো উচিত)! মেমরিটিতে কীভাবে চিত্রটি ঘোরানো যায় তা আমি বুঝতে পারি না - আদর্শভাবে আমি কেবল imageOrientation
সমস্ত পতাকা একসাথে মুছতে পছন্দ করব would
এখানে অন্য কিছু যা আমাকেও বিস্মিত করে চলেছে ... আমি যখন ছবি তুলি, তখন imageOrientation
সেটি 3 এ সেট করা থাকে My আমার কাজের কোডটি এটি উপলব্ধি করার জন্য যথেষ্ট স্মার্ট এবং এটি ফ্লিপ করে যাতে ব্যবহারকারী কখনও খেয়াল করে না। তদ্ব্যতীত, লাইব্রেরিতে চিত্রটি সংরক্ষণ করার জন্য আমার কোড এটিকে উপলব্ধি করে, এটিকে ফ্লিপ করে, তারপরে এটি সংরক্ষণ করে যাতে এটি ক্যামেরার রোলটিতে সঠিকভাবে উপস্থিত হয়।
কোডটি দেখতে তেমন দেখাচ্ছে:
NSData* pngdata = UIImagePNGRepresentation (self.workingImage); //PNG wrap
UIImage* img = [self rotateImageAppropriately:[UIImage imageWithData:pngdata]];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
আমি যখন এই নতুন সংরক্ষিত চিত্রটি আমার অ্যাপ্লিকেশনটিতে লোড করি তখন imageOrientation
তা 0 - আমি দেখতে চাই ঠিক তাই হয়, এবং আমার ঘূর্ণনের কাজটি চালানোর প্রয়োজনও হয় না (দ্রষ্টব্য: কোনও ক্যামেরায় তোলা চিত্রের বিপরীতে ইন্টারনেট থেকে চিত্রগুলি লোড করার সময়) , imageOrientation
সর্বদা 0 হয়, নিখুঁত আচরণের ফলে)। কোনও কারণে, আমার সংরক্ষণ কোডটি এই imageOrientation
পতাকাটি মুছে ফেলবে বলে মনে হচ্ছে । আমি কেবল সেই কোডটি চুরি করে ব্যবহারকারীর ছবি নেওয়ার সাথে সাথে ছবিটি ওরিয়েন্টেশনটি মুছে ফেলার জন্য এটি ব্যবহার করার আশা করছিলাম এবং অ্যাপটিতে এটি যুক্ত হয়েছে, তবে এটি কার্যকর হবে বলে মনে হচ্ছে না। এর UIImageWriteToSavedPhotosAlbum
সাথে বিশেষ কিছু করে imageOrientation
?
এই সমস্যাটির সর্বোত্তম সমাধান imageOrientation
হ'ল ব্যবহারকারী কোনও চিত্র নেওয়ার সাথে সাথেই এটি উড়িয়ে দেবে । আমি ধরে নিই অ্যাপল কোনও কারণে আবর্তন আচরণ করেছে, তাইনা? কিছু লোক পরামর্শ দিয়েছিলেন যে এটি একটি অ্যাপল ত্রুটি।
(... আপনি যদি এখনও হারিয়ে না যান ... দ্রষ্টব্য 2: আমি যখন একটি অনুভূমিক ছবি তুলি তখন ইন্টারনেট থেকে তোলা ফটোগুলির মতোই সবকিছু ঠিকঠাকভাবে কাজ করে বলে মনে হয়)
সম্পাদনা:
এখানে কিছু চিত্র এবং পরিস্থিতি বাস্তবে দেখতে কেমন। এখনও অবধি মন্তব্যগুলির ভিত্তিতে, দেখে মনে হচ্ছে এই অদ্ভুত আচরণটি কেবল আইফোনের আচরণের চেয়ে বেশি, যা আমি ভাল বলে মনে করি।
এটি আমার ফোনের সাথে তোলা ছবির একটি চিত্র (যথাযথ ওরিয়েন্টেশনটি নোট করুন), আমি যখন ছবিটি ছড়িয়ে দিয়েছিলাম তখন এটি আমার ফোনে যেমন হয়েছিল তেমন প্রদর্শিত হয়:
আমি নিজের কাছে ইমেল করার পরে চিত্রটি জিমেইলে দেখতে কেমন তা মনে হচ্ছে (মনে হয় জিমেইল এটি সঠিকভাবে পরিচালনা করে):
উইন্ডোতে চিত্রটি থাম্বনেইলের মতো দেখতে যা এখানে দেওয়া হচ্ছে (এটি সঠিকভাবে পরিচালনা করা হয় এমনটি মনে হয় না):
উইন্ডোজ ফটো ভিউয়ার দিয়ে খোলার সময় এখানে আসল চিত্রটি দেখতে কেমন তা দেখায় (এখনও সঠিকভাবে পরিচালনা করা হয় না):
এই প্রশ্নের সমস্ত মন্তব্যের পরে, আমি যা ভাবছি তা এখানে ... আইফোন একটি চিত্র নিয়েছে এবং বলেছে "এটিকে সঠিকভাবে প্রদর্শন করতে এটি 90 ডিগ্রি ঘোরানো দরকার"। এই তথ্যটি এক্সইফের ডেটাতে থাকবে। (কেন এটিকে 90 ডিগ্রি ঘোরানো দরকার, সোজা উল্লম্বে ডিফল্ট করার পরিবর্তে, আমি জানি না)। এখান থেকে, জিএমএল সেই এক্সআইএফ ডেটাটি পড়তে এবং বিশ্লেষণ করতে এবং এটি সঠিকভাবে প্রদর্শন করার জন্য যথেষ্ট স্মার্ট। উইন্ডোজ অবশ্য এক্সআইএফ ডেটা পড়ার পক্ষে যথেষ্ট স্মার্ট নয় এবং তাই চিত্রটিকে ভুলভাবে প্রদর্শন করে । আমার অনুমানগুলি কি সঠিক?