উত্তর:
আপনি এখন আপনার ইমেজটির নাম অনুসারে উল্লেখ করতে পারেন ঠিক যেমন আপনি কোনও .png ফাইল করেন।
UIImage(named: "myImage")এক্সকোডে ভেক্টর সমর্থন বিভ্রান্তিকর, কারণ বেশিরভাগ লোকেরা যখন ভেক্টরগুলির কথা ভাবেন, তখন তারা এমন চিত্রগুলির কথা ভাবেন যা স্কেল আপ এবং ডাউন করতে পারে এবং এখনও ভাল দেখাচ্ছে। তবে, এক্সকোড 6 এবং 7 এর আইওএসের জন্য সম্পূর্ণ ভেক্টর সমর্থন নেই, তাই জিনিসগুলি কিছুটা আলাদাভাবে কাজ করে।
ভেক্টর সিস্টেমটি সত্যই সহজ । এটা আপনার সময় লাগে .pdfইমেজ, এবং সৃষ্টি @1x.png, @2x.pngএবং @3x.pngএ সম্পদ বিল্ড সময় । (আপনি এটি যাচাই করতে Assets.car এর সামগ্রীগুলি পরীক্ষা করার জন্য একটি সরঞ্জাম ব্যবহার করতে পারেন ))
উদাহরণস্বরূপ, foo.pdfধরুন আপনাকে দেওয়া হয়েছে যা একটি 44x44 ভেক্টর সম্পদ। এ বিল্ড সময় এটা নিম্নলিখিত ফাইলগুলি উৎপন্ন হবে:
foo@1x.png 44x44 এfoo@2x.png 88x88 এfoo@3x.png 132x132 এএটি কোনও আকারের চিত্রের জন্য একই কাজ করে। উদাহরণস্বরূপ, আপনার যদি bar.pdf100x100 হয় তবে আপনি পাবেন:
bar@1x.png 100x100 এbar@2x.png 200x200 এbar@3x.png 300x300 এresizableImageWithCapInsets:স্লাইস মানগুলি ব্যবহার করে এবং ভাগ করে কোডে নিজেই এটি করতে পারেন[UIScreen mainScreen].scale
CGFloat scale = [UIScreen mainScreen].scale; UIImage *image = [[UIImage imageNamed:@"my_unsliced_asset"] resizableImageWithCapInsets:UIEdgeInsetsMake(10 * scale, 11 * scale, 12 * scale, 13 * scale)];
এটি @ সেনসুলফুলের দুর্দান্ত উত্তরের পরিপূরক।
আমি কীভাবে ইনকস্কেপ এ এটি করব তা যেহেতু এটি নিখরচায় এবং ওপেন সোর্স তবে অন্যান্য প্রোগ্রামগুলি একই রকম হওয়া উচিত।
ইনস্কেপে:
মন্তব্য:
আপনার যদি ইতিমধ্যে একটি .svg চিত্র থাকে যা ভুল পৃষ্ঠার আকার হয় তবে নিম্নলিখিতটি করুন:
একটি .svg ফাইলকে একটি .pdf এ রূপান্তর করতে আপনি নিজের কাজের জন্য অনলাইন ইউটিলিটিগুলিও খুঁজে পেতে পারেন। এই উত্তর থেকে একটি উদাহরণ এখানে । এটি আপনাকে সহজেই .pdf আকার সেট করার অনুমতি দেওয়ার সুবিধা রয়েছে।
যারা এখনও আপডেট করেননি তাদের জন্য এক্সকোড 9 (আইওএস 11) এ পরিবর্তন করা হয়েছিল।
কোকোয়া টাচ (ডাব্লুডাব্লুডিসি 2017 সেশন ২০১৮) এ নতুন কী রয়েছে (@ 32: 55) https://developer.apple.com/videos/play/wwdc2017/201/
কয়েকটি কথায়, সম্পদ ক্যাটালগের মধ্যে এখন "ভেক্টর ডেটা সংরক্ষণ করুন" নামক বৈশিষ্ট্য পরিদর্শকের নতুন চেকবক্স অন্তর্ভুক্ত রয়েছে। চেক করা হলে, পিডিএফ ডেটা সংকলিত বাইনারিতে অন্তর্ভুক্ত করা হবে, এর কোর্সের আকার বৃদ্ধি করবে। তবে এটি আইওএসকে উভয় দিকের ভেক্টর ডেটা স্কেল করার এবং সুন্দর চিত্র সরবরাহ করার সুযোগ দেয় ((এর নিজস্ব অসুবিধা সহ)। ১১ এর নিচে আইওএসের জন্য, উত্তরের উপরে বর্ণিত পুরাতন স্কেলিং পদ্ধতি ব্যবহার করা হয়েছে।
আপনি এই প্রকল্পের ভিতরে সাধারণ পিডিএফ ফাইলগুলি ভেক্টর চিত্র হিসাবে ব্যবহার করতে পারেন এবং এই এক্সটেনশনটি ব্যবহার করে কোনও আকারের চিত্র সরবরাহ করতে পারেন। এই উপায়টি আরও ভাল কারণ আইওএস আপনার পিডিএফ ফাইলগুলির মধ্যে থেকে .PNG চিত্র তৈরি করতে পারে না, এছাড়াও আপনি যে কোনও আকারের সাথে আপনার চিত্রগুলি রেন্ডার করতে পারেন:
extension UIImage {
static func fromPDF(filename: String, size: CGSize) -> UIImage? {
guard let path = Bundle.main.path(forResource: filename, ofType: "pdf") else { return nil }
let url = URL(fileURLWithPath: path)
guard let document = CGPDFDocument(url as CFURL) else { return nil }
guard let page = document.page(at: 1) else { return nil }
let imageRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
if #available(iOS 10.0, *) {
let renderer = UIGraphicsImageRenderer(size: size)
let img = renderer.image { ctx in
UIColor.white.withAlphaComponent(0).set()
ctx.fill(imageRect)
ctx.cgContext.translateBy(x: 0, y: size.height)
ctx.cgContext.scaleBy(x: 1.0, y: -1.0)
ctx.cgContext.concatenate(page.getDrawingTransform(.artBox, rect: imageRect, rotate: 0, preserveAspectRatio: true))
ctx.cgContext.drawPDFPage(page);
}
return img
} else {
// Fallback on earlier versions
UIGraphicsBeginImageContextWithOptions(size, false, 2.0)
if let context = UIGraphicsGetCurrentContext() {
context.interpolationQuality = .high
context.setAllowsAntialiasing(true)
context.setShouldAntialias(true)
context.setFillColor(red: 1, green: 1, blue: 1, alpha: 0)
context.fill(imageRect)
context.saveGState()
context.translateBy(x: 0.0, y: size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.concatenate(page.getDrawingTransform(.cropBox, rect: imageRect, rotate: 0, preserveAspectRatio: true))
context.drawPDFPage(page)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
return nil
}
}
}