আমি কীভাবে জাভা ব্যবহার করে কোনও চিত্রের আকার পরিবর্তন করতে পারি?


126

আমার পিএনজি, জেপিইজি এবং জিআইএফ ফাইলগুলির আকার পরিবর্তন করতে হবে। আমি জাভা ব্যবহার করে এটি কীভাবে করতে পারি?


14
যেহেতু আপনি একটি লাইব্রেরি চাইলেন, বাস্তব উত্তর এখানে: stackoverflow.com/questions/244164/... । গৃহীত উত্তরের কোডের তুলনায় এটি ব্যবহার করা অনেক সহজ;)
আর্তুর গাজোভি

আমি গ্রন্থাগারের অংশের সাথে একমত নই: গ্রাফিক্স 2 ডি অ্যাড লাইব্রেরির অংশ এবং এটি ওপেন সোর্স। শেষ অংশের জন্য (ওপেন সোর্স) আমি 100% নিশ্চিত নই, তবে যেভাবে যাইহোক অ্যাডটি কোডটি দেখবে কে?
বুখার্ড

উত্তর:


87

চিত্রটি লোড করার পরে আপনি চেষ্টা করতে পারেন:

BufferedImage createResizedCopy(Image originalImage, 
            int scaledWidth, int scaledHeight, 
            boolean preserveAlpha)
    {
        System.out.println("resizing...");
        int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
        BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType);
        Graphics2D g = scaledBI.createGraphics();
        if (preserveAlpha) {
            g.setComposite(AlphaComposite.Src);
        }
        g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null); 
        g.dispose();
        return scaledBI;
    }

9
আমি খুঁজে পেয়েছি যে এই কৌশলটি এমন একটি চিত্র তৈরি করে যা আমার প্রয়োজনের জন্য উচ্চমানের মানের নয়।
মরগানকোডস

1
Image.getScaledInstance (প্রস্থ, উচ্চতা, ইঙ্গিত) এছাড়াও কি করবে?
কোডেপ্লে

1
সংরক্ষণকারী আলফা কি চারপাশে ভুল উপায়ে পরীক্ষা করতে পারেন (চিত্রের টাইপের জন্য)?
থিলো

আমি @ এমরগানকোডগুলির সাথে একমত চিত্রের গুণমানটি একই মাত্রায় পুনরায় আকার দেওয়ার সময় উদাহরণস্বরূপ ওএস এক্স পূর্বরূপের সাথে আপনি যা পান তার চেয়ে অনেক খারাপ। কিছু ওপেন-সোর্স লাইব্রেরি আরও ভাল ভাড়া কিনা তা দেখার চেষ্টা করবে।
থিলো

1
"কিছু ওপেন-সোর্স লাইব্রেরি তারা আরও ভাল কিনা কিনা তা দেখার চেষ্টা করবে।" @ রিয়াদকাল্লার উত্তর থেকে ইমগ্যাসকালারের জন্য +1
থিলো

182

এফডাব্লুআইডাব্লু আমি সবে মুক্তি পেয়েছি (অ্যাপাচি 2, গিটহাবটিতে হোস্ট করা হয়েছে) জাভা জন্য ইম্পস্কালার নামে একটি সাধারণ চিত্র-স্কেলিং লাইব্রেরি ( মাভেন কেন্দ্রীয়তে উপলব্ধ )।

ইমেজ-স্কেলিংয়ের জন্য গ্রন্থাগারটি কয়েকটি পৃথক পদ্ধতি প্রয়োগ করে (ক্রিস ক্যাম্পবেলের কিছু ছোটখাট বর্ধনের সাথে বর্ধিত পদ্ধতি সহ) এবং যদি আপনি এটি জিজ্ঞাসা করেন তবে আপনার পক্ষে সর্বাধিক অনুকূল পিকচারটি বেছে নেবে, বা আপনাকে দ্রুততম বা সেরা দেখাচ্ছে (যদি আপনি যে জন্য জিজ্ঞাসা করুন)।

ব্যবহার মৃত-সহজ, স্থির পদ্ধতিগুলির একগুচ্ছ। সবচেয়ে সহজ ব্যবহারের ক্ষেত্রে:

BufferedImage scaledImage = Scalr.resize(myImage, 200);

সমস্ত ক্রিয়াকলাপ চিত্রের মূল অনুপাত বজায় রাখে, সুতরাং এক্ষেত্রে আপনি imgscalr কে 200 পিক্সেল প্রশস্ত এবং 200 পিক্সেল লম্বার সীমার মধ্যে আপনার চিত্রটিকে পুনরায় আকার দিতে বলছেন এবং এটি ডিফল্টরূপে এটির জন্য সেরা চেহারা এবং দ্রুততম পদ্ধতির স্বয়ংক্রিয়ভাবে নির্বাচন করবে নির্দিষ্ট করা হয়নি।

আমি শুরুতেই বুঝতে পারি যে এটি আত্ম-প্রচারের মতো দেখাচ্ছে (এটি হ'ল) ​​তবে আমি এই সঠিক বিষয়টিকে গুগল করতে আমার ন্যায্য অংশ ব্যয় করেছি এবং বিভিন্ন ফলাফল / দৃষ্টিভঙ্গি / চিন্তাভাবনা / পরামর্শ নিয়ে এসেছি এবং বসে বসে একটি লিখার সিদ্ধান্ত নিয়েছি সরল বাস্তবায়ন যা 80-85% ব্যবহারের ক্ষেত্রে মোকাবেলা করবে যেখানে আপনার একটি চিত্র রয়েছে এবং সম্ভবত এটির জন্য একটি থাম্বনেইল চান - যত তাড়াতাড়ি সম্ভব ততই ভাল দেখানো (যত চেষ্টা করেছেন তাদের জন্য, আপনি লক্ষ্য করবেন) একটি গ্রাফিক্স.ড্রাইজ ইমেজ করা এমনকি ছোট্ট যথেষ্ট পরিমাণ ইমেজটিতে বিকিউবিক ইন্টারপোলেশন সহ, এটি এখনও আবর্জনার মতো দেখাচ্ছে)।


1
রিয়াদ, আমি স্ক্যালার ব্যবহার পছন্দ করেছি। আমি জানতে আগ্রহী, আপনি কীভাবে সমস্ত স্থিতিশীল পদ্ধতিতে একটি এপিআই বেছে নেবেন? আমি অনুরূপ এপিআই লিখেছিলাম যা একজন বিল্ডারের কাছাকাছি ছিল। লাইক new ImageScaler(img).resizeTo(...).rotate(...).cropTo(...).toOutputBuffer()। আমি আপনার উপায়ও পছন্দ করি এবং আমি এটি সহজ বলে মনে করি।
আমির রামিনফার

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

5
কেন্দ্রীয় মাভেন সংগ্রহস্থলগুলিতে এটি উপলব্ধ করার জন্য +1!
গ্রিলস

এই বাফারডিমেজ ক্লাসটি কী, অ্যান্ড্রয়েড স্টুডিওগুলি এটি কেন খুঁজে পায় না? @ রিয়াদ কল্লা
মিলাদ

3
@ xe4me বাফার্ডআইমেজটি J2SE জেডিকে (জাভা 2 ডি কাঠামোর অংশ) একটি বর্গ যা কাঁচা, সঙ্কুচিত পিক্সেল ডেটার উপস্থাপন করতে ব্যবহৃত হয়। এটি অ্যান্ড্রয়েডে উপলব্ধ নয়, অ্যান্ড্রয়েড চিত্রের ডেটা নিয়ে কাজ করার জন্য তার নিজস্ব ক্লাস সরবরাহ করে।
রিয়াদ কাল্লা

54

থাম্বনেইলেটর এমআইটি লাইসেন্সের অধীনে বিতরণ করা একটি সাবলীল ইন্টারফেস সহ জাভা-র জন্য একটি ওপেন-সোর্স ইমেজ রাইজিং লাইব্রেরি

আমি এই লাইব্রেরিটি লিখেছি কারণ জাভাতে উচ্চমানের থাম্বনেইল তৈরি করা আশ্চর্যজনকভাবে কঠিন হতে পারে এবং ফলস্বরূপ কোডটি বেশ অগোছালো হতে পারে। থাম্বনেইলেটরের সাহায্যে একটি সহজ সাবলীল এপিআই ব্যবহার করে মোটামুটি জটিল কাজগুলি প্রকাশ করা সম্ভব।

একটি সহজ উদাহরণ

একটি সাধারণ উদাহরণের জন্য, একটি চিত্র নেওয়া এবং এটিকে আকারটি 100 x 100 (মূল চিত্রের দিক অনুপাত সংরক্ষণ করে) করা এবং কোনও ফাইলে সংরক্ষণ করা একক বিবৃতিতে অর্জন করতে পারে:

Thumbnails.of("path/to/image")
    .size(100, 100)
    .toFile("path/to/thumbnail");

একটি উন্নত উদাহরণ

থাম্বনেইলেটরের সাবলীল ইন্টারফেসের মাধ্যমে জটিল পুনরায় আকার দেওয়ার কাজগুলি সম্পাদন সহজতর করা হয়।

ধরা যাক আমরা নিম্নলিখিতগুলি করতে চাই:

  1. একটি ডিরেক্টরিতে ছবিগুলি নিন এবং,
  2. তাদের মূল আকারের অনুপাতের সাথে 100 x 100 এ আকার দিন,
  3. তাদের সবাইকে মান সেটিংসের সাথে JPEGs আউট সংরক্ষণ 0.85,
  4. সঙ্গে যেখানে ফাইলের নাম মূল থেকে নেয়া হয় thumbnail.শুরুতে যোগ করা

থাম্বনেইলেটরে অনুবাদিত, আমরা নিম্নলিখিতগুলির সাথে উপরের সম্পাদন করতে সক্ষম হব:

Thumbnails.of(new File("path/to/directory").listFiles())
    .size(100, 100)
    .outputFormat("JPEG")
    .outputQuality(0.85)
    .toFiles(Rename.PREFIX_DOT_THUMBNAIL);

চিত্রের গুণমান এবং গতি সম্পর্কে একটি নোট

গ্রহণযোগ্য রানটাইম পারফরম্যান্স নিশ্চিত করার সময় উচ্চ-মানের থাম্বনেইল উত্পন্ন করার জন্য এই লাইব্রেরিটি চিত হােস এবং রোমেন গাই দ্বারা ফিল্টি রিচ ক্লায়েন্টগুলিতে হাইলাইট করা প্রগতিশীল বিলিনিয়ার স্কেলিং পদ্ধতি ব্যবহার করে ।


1
কুলবার্ড, এপিআই সহ সত্যিই দুর্দান্ত কাজ। খুব সোজা এগিয়ে এবং ব্যবহার করা সহজ।
রিয়াদ কল্লা

@ লর্ডটি: আপনি আনন্দিত যে আপনি থাম্বনেলিটরটি সহজেই ব্যবহারযোগ্য বলে খুঁজে পেয়েছেন :)
কুলবার্ড

আমি কীভাবে 500x400 মূল চিত্র সহ 80x80 থাম্বনেইল তৈরি করতে পারি? আমি এর জন্য কোনও বিকল্প দেখিনি। ধন্যবাদ!
টেরি

".আউটপুট ফরম্যাট (" জেপিইজি ")" ডকুমেন্টেশনে কোথাও লেখা নেই।
ভিনসেন্ট ক্যান্টিন

@ ভিনসেন্ট ব্যবহার করা যেতে পারে এমন সমস্ত পদ্ধতির সম্পূর্ণ তালিকা থাম্বনেইল্টর এপিআই ডকুমেন্টেশনে রয়েছে - thumbnailator.googlecode.com/hg/javadoc/net/coobird/…
কুকিবার্ড

12

এটি করার জন্য আপনার কোনও গ্রন্থাগার দরকার নেই। আপনি নিজে জাভা দিয়ে এটি করতে পারেন।

স্কেলিং ইমেজগুলি সম্পর্কে ক্রিস ক্যাম্পবেলের একটি দুর্দান্ত এবং বিস্তারিত লেখার ব্যবস্থা রয়েছে - এই নিবন্ধটি দেখুন

চেত হায়েস এবং রোমেন গাইয়ের তাদের ফিলিটি রিচ ক্লায়েন্টস বইটিতে চিত্র স্কেলিংয়ের একটি বিশদ এবং খুব তথ্যমূলক রচনা-আপ রয়েছে ।


7
ক্রিসের নিবন্ধটি হ'ল আমাকে প্রথমে imgscalr লেখার জন্য অনুপ্রাণিত করেছিল; এবং এই জাতীয় প্রশ্ন (এবং আপনার মত উত্তর)। কোনও চিত্র থেকে কীভাবে ভাল থাম্বনেইল পাবেন তা বার বার জিজ্ঞাসা করছেন অনেক লোক। এটি করার বিভিন্ন উপায় রয়েছে, ক্রিস সর্বদা সেরা উপায় নয়, এটি আপনি কী চেষ্টা করছেন এবং হ্রাস কতটা বড় তা নির্ভর করে। imgscalr এর সবগুলিকে সম্বোধন করে এবং এটি 1 শ্রেণি।
রিয়াদ কল্লা

2
+1, আমি সম্মত, ফিলিটি সমৃদ্ধ ক্লায়েন্টগুলি "কার্যকর জাভা" এর সাথে সমানভাবে সেখানে সেরা জাভা বইগুলির মধ্যে একটি, তবে ইমজিস্ক্যালার আমি ব্যবহার করি কারণ আমি অলস।
শন ভাদার


9

আপনি যদি বড় ইমেজ নিয়ে কাজ করছেন বা একটি সুন্দর চেহারা ফলাফল চান এটি জাভাতে তুচ্ছ কাজ নয়। কেবলমাত্র গ্রাফিক্স 2 ডি এর মাধ্যমে পুনরুদ্ধার অপের মাধ্যমে এটি করা একটি উচ্চ মানের থাম্বনেইল তৈরি করবে না। আপনি এটি জেএআই ব্যবহার করে করতে পারেন, তবে এটির জন্য আপনার আরও ভাল কাজ দরকার যা আপনি কল্পনা করে দেখেন যা দেখতে ভাল লাগে এবং জেআইএর আমাদের জেভিএমকে আউটআফমেমরি ত্রুটিগুলি দিয়ে ফুঁকিয়ে দেওয়ার অভ্যাসের অভ্যাস রয়েছে।

আমি ইমেজম্যাগিককে বাহ্যিক এক্সিকিউটেবল হিসাবে ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনি এটি থেকে দূরে সরে যেতে পারেন। এটি ব্যবহার করা সহজ এবং এটি কাজটি ঠিকমতো করে যাতে আপনার প্রয়োজন না হয়।


4

যদি, আপনার মাস্কিনে চিত্রগ্রাহক ইনস্টল করা কোনও বিকল্প হয় তবে আমি ইম 4 জাভা প্রস্তাব করছি । এটি কমান্ড লাইন ইন্টারফেসের উপর একটি খুব পাতলা বিমূর্ত স্তর, তবে এটি খুব ভালভাবে কাজ করে।


3

জাভা এপিআই ইমেজ এবং ডাউনগ্রেড ইমেজ মানের জন্য একটি মানক স্কেলিং বৈশিষ্ট্য সরবরাহ করে না।

এর কারণে আমি জাভাসিভি থেকে সিভিআরসিজেড ব্যবহার করার চেষ্টা করেছি তবে মনে হচ্ছে এটি সমস্যা সৃষ্টি করে।

আমি চিত্র স্কেলিংয়ের জন্য একটি ভাল গ্রন্থাগার পেয়েছি: কেবল আপনার pom.xML এ "জাভা-চিত্র-স্কেলিং" এর জন্য নির্ভরতা যুক্ত করুন।

<dependency>
    <groupId>com.mortennobel</groupId>
    <artifactId>java-image-scaling</artifactId>
    <version>0.8.6</version>
</dependency>

মাভেন ভান্ডারগুলিতে আপনি এর জন্য সাম্প্রতিক সংস্করণটি পাবেন।

যাত্রা। আপনার জাভা প্রোগ্রামে

ResampleOp resamOp = new ResampleOp(50, 40);
BufferedImage modifiedImage = resamOp.filter(originalBufferedImage, null);

এটি গিটহাব ( github.com/mortennobel/java-image-scaling.git ) এও উপলভ্য এবং এটির 8.0 সংস্করণ রয়েছে। এটি পম.এক্সএমএল-এ ঠিক করা দরকার, আপনি (উত্স এবং টার্গেট পরিবর্তন করে কমপক্ষে 1.6 হিসাবে নতুন মাভেন আর 1.5 সমর্থন করে না)।
ক্রোম্যাক্স

2

আপনি জাভা জন্য কম্যান্ড-লাইন ইন্টারফেস হিসাবে im4java সহ গ্রাফিক্স ম্যাগিক ইমেজ প্রসেসিং সিস্টেমটি ব্যবহার করার চেষ্টা করতে পারেন ।

গ্রাফিক্স ম্যাগিকের অনেক সুবিধা রয়েছে তবে সবার জন্য একটি:

  • জিএম বিশ্বের বৃহত্তম ফটো সাইটগুলিতে কোটি কোটি ফাইল প্রক্রিয়া করতে ব্যবহৃত হয় (উদাঃ ফ্লিকার এবং এটসি)।

1

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

http://www.jmagick.org/index.html


1

কেবল বুখার্ডের উত্তরটি ব্যবহার করুন তবে গ্রাফিকগুলি তৈরি করার পরে এই লাইনটি যুক্ত করুন:

    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

আপনি BICUBIC এ মানও সেট করতে পারেন, এটি একটি উন্নত মানের চিত্র তৈরি করবে তবে এটি আরও ব্যয়বহুল অপারেশন। আপনি সেট করতে পারেন এমন অন্যান্য রেন্ডারিং ইঙ্গিত রয়েছে তবে আমি খুঁজে পেয়েছি যে ইন্টারপোলেশন সবচেয়ে উল্লেখযোগ্য প্রভাব তৈরি করে। আপনি যদি অনেকটা জুম করতে চান তবে মনে রাখবেন, জাভা কোড সম্ভবত খুব ধীর হবে। আমি দেখতে পাই যে বৃহত্তর চিত্রগুলি প্রায় 300% জুমের তুলনায় পিছনে উত্পাদন শুরু করে এমনকি গুণমানের ওপরে গতির জন্য অনুকূলিতকরণের জন্য সমস্ত রেন্ডারিং ইঙ্গিতগুলি সেট করে।



1

দেখা যাচ্ছে যে পারফরম্যান্ট স্কেলার লেখার বিষয়টি তুচ্ছ নয়। আমি ওপেন সোর্স প্রকল্পের জন্য এটি একবার করেছিলাম: ইমেজস্কেলার

নীতিগতভাবে 'java.awt. ইমেজ # getScaledInstance (int, int, int)' কাজটিও করবে, তবে এর সাথে একটি বাজে বাগ রয়েছে - বিশদর জন্য আমার লিঙ্কটি দেখুন।


0

আমি জিআইএফ অ্যানিমেশন পরিচালনা করার জন্য অবাধে উপলভ্য ক্লাসগুলির (অ্যানিমেটেড জিফইনকোডার, জিআইপিডেকোডার এবং এলডাব্লুডিজাউন কোডার) সাথে একটি সমাধান তৈরি করেছি।
আপনি jgifcode jar ডাউনলোড করতে এবং GifImageUtil ক্লাস চালাতে পারেন। লিঙ্ক: http://www.jgifcode.com


1
আপনি প্রস্তাবিত পণ্যটির সাথে যুক্ত থাকলে দয়া করে উত্তরে উল্লেখ করুন।
হান্স ওলসন

ওয়াও ... এটি কি জিআইএফ অ্যানিমেটেড ইমেজটির আকার পরিবর্তন করার জন্য? এবং এটি বিনামূল্যে ?? Wwaww ... আমার এখনই এটি চেষ্টা করা উচিত ...
gumuruh

হ্যাঁ এটি আমার দ্বারা বিকাশিত। এটির উত্স কোড এখানে github.com/rt29/jgifcode - এটি এখন এখানে। আমি এটি আর সমর্থন করছি না।
রোহিত তিওয়ারি


0

আপনি যদি @ রিয়াদ কল্লার উত্তরটির মতো ইমপ্যাসক্লারটি আমদানি করতে না চান যা উপরে আমি পরীক্ষা করে দেখলাম যে এটি খুব ভাল কাজ করে, আপনি পিটার ওয়ালসারের উত্তর @ পিটার ওয়ালসের কাছ থেকে নেওয়া অন্য কোনও ইস্যুতে এটি করতে পারেন যদিও:

 /**
     * utility method to get an icon from the resources of this class
     * @param name the name of the icon
     * @return the icon, or null if the icon wasn't found.
     */
    public Icon getIcon(String name) {
        Icon icon = null;
        URL url = null;
        ImageIcon imgicon = null;
        BufferedImage scaledImage = null;
        try {
            url = getClass().getResource(name);

            icon = new ImageIcon(url);
            if (icon == null) {
                System.out.println("Couldn't find " + url);
            }

            BufferedImage bi = new BufferedImage(
                    icon.getIconWidth(),
                    icon.getIconHeight(),
                    BufferedImage.TYPE_INT_RGB);
            Graphics g = bi.createGraphics();
            // paint the Icon to the BufferedImage.
            icon.paintIcon(null, g, 0,0);
            g.dispose();

            bi = resizeImage(bi,30,30);
            scaledImage = bi;// or replace with this line Scalr.resize(bi, 30,30);
            imgicon = new ImageIcon(scaledImage);

        } catch (Exception e) {
            System.out.println("Couldn't find " + getClass().getName() + "/" + name);
            e.printStackTrace();
        }
        return imgicon;
    }

 public static BufferedImage resizeImage (BufferedImage image, int areaWidth, int areaHeight) {
        float scaleX = (float) areaWidth / image.getWidth();
        float scaleY = (float) areaHeight / image.getHeight();
        float scale = Math.min(scaleX, scaleY);
        int w = Math.round(image.getWidth() * scale);
        int h = Math.round(image.getHeight() * scale);

        int type = image.getTransparency() == Transparency.OPAQUE ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;

        boolean scaleDown = scale < 1;

        if (scaleDown) {
            // multi-pass bilinear div 2
            int currentW = image.getWidth();
            int currentH = image.getHeight();
            BufferedImage resized = image;
            while (currentW > w || currentH > h) {
                currentW = Math.max(w, currentW / 2);
                currentH = Math.max(h, currentH / 2);

                BufferedImage temp = new BufferedImage(currentW, currentH, type);
                Graphics2D g2 = temp.createGraphics();
                g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g2.drawImage(resized, 0, 0, currentW, currentH, null);
                g2.dispose();
                resized = temp;
            }
            return resized;
        } else {
            Object hint = scale > 2 ? RenderingHints.VALUE_INTERPOLATION_BICUBIC : RenderingHints.VALUE_INTERPOLATION_BILINEAR;

            BufferedImage resized = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = resized.createGraphics();
            g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
            g2.drawImage(image, 0, 0, w, h, null);
            g2.dispose();
            return resized;
        }
    }

0

এই ফলিং পদ্ধতিটি ব্যবহার করে দেখুন:

ImageIcon icon = new ImageIcon("image.png");
Image img = icon.getImage();
Image newImg = img.getScaledInstance(350, 350, java.evt.Image.SCALE_SMOOTH);
icon = new ImageIcon(img);
JOptionPane.showMessageDialog(null, "image on The frame", "Display Image", JOptionPane.INFORMATION_MESSAGE, icon);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.