এক্সকোডে (যেমন পিডিএফ ফাইল) ভেক্টর চিত্রগুলি কীভাবে কাজ করে?


176

এক্সকোড 6 এ ভেক্টর সমর্থন কীভাবে কাজ করে?

আমি যখন কোনও চিত্রকে পুনরায় আকার দেওয়ার চেষ্টা করি, তখন এটি ঝাঁকুনির মতো দেখায়, কী দেয়?

উত্তর:


351

এক্সকোডে ভেক্টরগুলি কীভাবে ব্যবহার করবেন (7 এবং 6.3+):

  1. সঠিক @ 1x আকারে একটি চিত্র .pdf ফাইল হিসাবে সংরক্ষণ করুন (উদাহরণস্বরূপ একটি সরঞ্জামদণ্ডের বোতামের জন্য 24x24 )।
  2. আপনার ইমেজ.এক্সক্যাসেট ফাইলগুলিতে একটি নতুন চিত্র সেট তৈরি করুন
  3. ইন পরিদর্শক আরোপ করা , সেট স্কেল উপাদানগুলোও করার একক ভেক্টর
  4. আপনার পিডিএফ ফাইলটি অল, ইউনিভার্সাল বিভাগে টেনে আনুন ।
  5. আপনি এখন আপনার ইমেজটির নাম অনুসারে উল্লেখ করতে পারেন ঠিক যেমন আপনি কোনও .png ফাইল করেন।

    UIImage(named: "myImage")

এক্সকোড (6.0 - 6.2) এর পুরানো সংস্করণগুলিতে কীভাবে ভেক্টর ব্যবহার করবেন:

  • ধাপ 3 ছাড়া, উপরে ধাপগুলি অনুসরণ করুন, সেট প্রকারভেদ করতে ভেক্টর

এক্সকোডে ভেক্টররা কীভাবে কাজ করে

এক্সকোডে ভেক্টর সমর্থন বিভ্রান্তিকর, কারণ বেশিরভাগ লোকেরা যখন ভেক্টরগুলির কথা ভাবেন, তখন তারা এমন চিত্রগুলির কথা ভাবেন যা স্কেল আপ এবং ডাউন করতে পারে এবং এখনও ভাল দেখাচ্ছে। তবে, এক্সকোড 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 এ

প্রভাব:

  • আপনি চিত্রটির জন্য কোনও নতুন আকার চয়ন করতে পারবেন না ; আপনি যদি 44x44 আকারে রাখেন তবেই এটি দেখতে দুর্দান্ত লাগবে। কারণটি হ'ল সম্পূর্ণ ভেক্টর সমর্থন কার্যকর করা হয়নি । এই ভেক্টরগুলি কেবলমাত্র আপনার চিত্র সম্পদ সংরক্ষণের সময় সাশ্রয় করে। আপনার যদি এমন কোনও সরঞ্জাম থাকে (যেমন একটি ফটোশপ স্ক্রিপ্ট) যা ইতিমধ্যে এটিকে এক-পদক্ষেপ প্রক্রিয়া করে তোলে, পিডিএফ ভেক্টর ব্যবহার করে আপনি যে একমাত্র জিনিস অর্জন করবেন তা হ'ল ভবিষ্যতের প্রমাণ (যেমন আইওএস 9 অ্যাপলে যদি 4x সম্পদের প্রয়োজন শুরু হয়, এটি কেবলমাত্র কাজ করবে), এবং আপনার রক্ষণাবেক্ষণের জন্য কম ফাইল থাকবে ।
  • আপনার পিডিএফ ফাইল হিসাবে সংরক্ষিত @ 1x আকারে আপনার সমস্ত সম্পদ জিজ্ঞাসা করা উচিত । অন্যান্য জিনিসের মধ্যে এটি ইউআইআইমেজভিউগুলিকে সঠিক অভ্যন্তরীণ সামগ্রীর আকার দিতে দেয়।

কেন এটি (সম্ভবত) এভাবে কাজ করে:

  • এটি পূর্ববর্তী আইওএস সংস্করণগুলির সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ করে তোলে ।
  • ভেক্টরকে পুনরায় আকার দেওয়ার সময় রানটাইমে একটি গণনামূলক নিবিড় কাজ হতে পারে; এই ভাবে প্রয়োগ করে, কোন কর্মক্ষমতা হিট হয়

8
ভাল লাগলো। এটি 2014 ডাব্লুডাব্লুডিসি সেশন 411-এ আলোচনা করা হয়েছে - সময়ে 44:13 এ "ইন্টারফেস বিল্ডারে কী নতুন"। মনে রাখবেন যে তারা বলছেন যে রাস্টারাইজেশনটি নির্মাণের সময় করা হয়। ম্যাকের উপর আকর্ষণীয়ভাবে এটি রানটাইমের সময় ভেক্টর ব্যবহার করবে। ভবিষ্যতে কিছু দূরবর্তী সময়ে আশা করি আইওএসও হবে।
মাইক ভোসেলার

15
দুর্ভাগ্যক্রমে এটি স্লাইস মানগুলিকে স্কেল করে না। সুতরাং আপনি যদি 5 টি কোণে টুকরো টুকরা করেন তবে এটি 2x এবং 3x চিত্রের জন্য এটি 10 ​​এবং 15 এ স্কেল করবে না।
জেসি

5
@ জেসি যদি আপনি স্লাইস মানগুলি স্কেল করতে চান তবে আপনি নিজের resizableImageWithCapInsets:স্লাইস মানগুলি ব্যবহার করে এবং ভাগ করে কোডে নিজেই এটি করতে পারেন[UIScreen mainScreen].scale
এরি লিটোভস্কি

1
টুকরো টুকরো করার বিষয়ে অ্যারি লিটভস্কির পরামর্শটি স্পষ্ট করার জন্য: আপনার সম্পত্তি থেকে স্লাইসিং সরিয়ে এটিকে কোডে সরিয়ে নেওয়া উচিতCGFloat scale = [UIScreen mainScreen].scale; UIImage *image = [[UIImage imageNamed:@"my_unsliced_asset"] resizableImageWithCapInsets:UIEdgeInsetsMake(10 * scale, 11 * scale, 12 * scale, 13 * scale)];
এরকম

6
এক্সকোড 8 এর জন্য আমি এটি কীভাবে করব? বিকল্পটি অদৃশ্য হয়ে গেছে বলে মনে হচ্ছে!
জেরাল্ড

26

এক্সকোড ৮-এ, আপনি এখনও একটি পিডিএফ যুক্ত করতে পারেন, একটি নতুন চিত্র সেট তৈরি করতে পারেন, এবং বৈশিষ্ট্য পরিদর্শকতে, স্কেলগুলিতে একক স্কেল বিকল্পটি সেট করতে পারেন। এখানে চিত্র বর্ণনা লিখুন


15

এটি @ সেনসুলফুলের দুর্দান্ত উত্তরের পরিপূরক।

.Pdf ফর্ম্যাটে ভেক্টর চিত্রগুলি কীভাবে তৈরি করবেন

আমি কীভাবে ইনকস্কেপ এ এটি করব তা যেহেতু এটি নিখরচায় এবং ওপেন সোর্স তবে অন্যান্য প্রোগ্রামগুলি একই রকম হওয়া উচিত।

ইনস্কেপে:

  1. একটি নতুন প্রকল্প তৈরি করুন।
  2. ফাইল> ডকুমেন্ট প্রোপার্টিগুলিতে যান এবং পিক্সের ইউনিটগুলির সাথে আপনার @ 1x আকার (44x44, 100x100, ইত্যাদি) যাই হোক না কেন কাস্টম পৃষ্ঠার আকার সেট করুন।
  3. আপনার শিল্পকর্ম তৈরি করুন।
  4. ফাইল> এ হিসাবে সংরক্ষণ করুন ...> মুদ্রণযোগ্য ডকুমেন্ট ফর্ম্যাট (* .পিডিএফ)> সংরক্ষণ করুন> ওকে যান। (বিকল্পভাবে, আপনি মুদ্রণ> ফাইল থেকে মুদ্রণ> আউটপুট ফর্ম্যাট: পিডিএফ> মুদ্রণ যেতে পারেন তবে অনেকগুলি বিকল্প নেই not)

মন্তব্য:

  • গৃহীত উত্তরে যেমন উল্লেখ করা হয়েছে, আপনি নিজের চিত্রটিকে পুনরায় আকার দিতে পারবেন না কারণ এক্সকোড এখনও নির্মাণের সময় রাস্টারযুক্ত চিত্রগুলি তৈরি করে। আপনার চিত্রটিকে পুনরায় আকার দেওয়ার প্রয়োজন হলে আপনার আলাদা আকারের একটি নতুন .pdf ফাইল তৈরি করা উচিত।
  • আপনার যদি ইতিমধ্যে একটি .svg চিত্র থাকে যা ভুল পৃষ্ঠার আকার হয় তবে নিম্নলিখিতটি করুন:

    1. পৃষ্ঠার আকার পরিবর্তন করুন (Inkscape> ফাইল> নথি সম্পত্তি)
    2. কাজের জায়গাতে সমস্ত বস্তু (সিটিআরএল + এ) নির্বাচন করুন এবং নতুন পৃষ্ঠার আকারে ফিট করার জন্য তাদের আকার পরিবর্তন করুন। (দিকের আকার রাখতে Ctrl টিপুন))
  • একটি .svg ফাইলকে একটি .pdf এ রূপান্তর করতে আপনি নিজের কাজের জন্য অনলাইন ইউটিলিটিগুলিও খুঁজে পেতে পারেন। এই উত্তর থেকে একটি উদাহরণ এখানে । এটি আপনাকে সহজেই .pdf আকার সেট করার অনুমতি দেওয়ার সুবিধা রয়েছে।

আরও পড়া


12

যারা এখনও আপডেট করেননি তাদের জন্য এক্সকোড 9 (আইওএস 11) এ পরিবর্তন করা হয়েছিল।

কোকোয়া টাচ (ডাব্লুডাব্লুডিসি 2017 সেশন ২০১৮) এ নতুন কী রয়েছে (@ 32: 55) https://developer.apple.com/videos/play/wwdc2017/201/

কয়েকটি কথায়, সম্পদ ক্যাটালগের মধ্যে এখন "ভেক্টর ডেটা সংরক্ষণ করুন" নামক বৈশিষ্ট্য পরিদর্শকের নতুন চেকবক্স অন্তর্ভুক্ত রয়েছে। চেক করা হলে, পিডিএফ ডেটা সংকলিত বাইনারিতে অন্তর্ভুক্ত করা হবে, এর কোর্সের আকার বৃদ্ধি করবে। তবে এটি আইওএসকে উভয় দিকের ভেক্টর ডেটা স্কেল করার এবং সুন্দর চিত্র সরবরাহ করার সুযোগ দেয় ((এর নিজস্ব অসুবিধা সহ)। ১১ এর নিচে আইওএসের জন্য, উত্তরের উপরে বর্ণিত পুরাতন স্কেলিং পদ্ধতি ব্যবহার করা হয়েছে।


1

আপনি এই প্রকল্পের ভিতরে সাধারণ পিডিএফ ফাইলগুলি ভেক্টর চিত্র হিসাবে ব্যবহার করতে পারেন এবং এই এক্সটেনশনটি ব্যবহার করে কোনও আকারের চিত্র সরবরাহ করতে পারেন। এই উপায়টি আরও ভাল কারণ আইওএস আপনার পিডিএফ ফাইলগুলির মধ্যে থেকে .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
        }
    }

}

1
আমি এটি চেষ্টা করেছিলাম, তবে মনে হয় না এটি বড় আকারের পিক্সেলের আকার পর্যন্ত চিত্রটিকে আঁকায়? আমি যে ইউআইএমেজ পেয়েছি তা হ'ল সঠিক আকার; এটি ঠিক যে ভেক্টর চিত্রটি কেন্দ্রিক এবং এখনও পিডিএফের মূল পিক্সেল আকারে। (আমি এটি ইউআইআইজেজের আকারে স্কেল করতে চেয়েছিলাম)) আপনি কি জানেন যে এটি সম্ভব হবে কিনা?
DivideByZer0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.