একটি ফাইল হিসাবে একটি বাফার্ডআইমেজ কীভাবে সংরক্ষণ করবেন


125

আমি একটি চিত্র পুনরায় আকার দিতে imgscalr জাভা লাইব্রেরি ব্যবহার করছি ।

একটি পুনরায় আকার () পদ্ধতি কলের ফলাফলটি একটি বাফার্ডআইমেজ অবজেক্ট। আমি এখন এটি ফাইল হিসাবে (সাধারণত .jpg) সংরক্ষণ করতে চাই।

আমি এটা কিভাবে করবো? আমি BufferedImage-> থেকে যেতে চাই Fileতবে সম্ভবত এটি সঠিক পদ্ধতির নয়?

উত্তর:


238
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

7
এছাড়াও, আউটপুটফাইলে উপস্থিত রয়েছে তা নিশ্চিত করুন। যদি এটি না হয়, লিখুন () (ভুলভাবে) একটি নালপয়েন্টারএক্সেপশন নিক্ষেপ করবে
কোডি এস

9
একটি চেষ্টা / ধরা দিয়ে ঘিরে
লু মর্দা

NullPointerExceptionif (outputfile.exists())
ধরবেন

24

ক্লাসের BufferedImageলেখার পদ্ধতি ব্যবহার করে আপনি কোনও বস্তু সংরক্ষণ করতে পারেন javax.imageio.ImageIO। পদ্ধতির স্বাক্ষরটি এরকম:

public static boolean write(RenderedImage im, String formatName, File output) throws IOException

এখানে imহয় RenderedImageলিখিত হবে, formatNameহয় স্ট্রিং বিন্যাসের অনানুষ্ঠানিক নাম ধারণকারী (যেমন PNG) এবং outputফাইল বস্তুর লেখা হবে। পিএনজি ফাইল ফর্ম্যাটের জন্য পদ্ধতির ব্যবহারের উদাহরণ নীচে দেখানো হয়েছে:

ImageIO.write(image, "png", file);

20

উত্তরটি একটি চিত্র লেখার / সংরক্ষণের জন্য জাভা ডকুমেন্টেশনের টিউটোরিয়ালের মধ্যে রয়েছে ।

Image I/Oবর্গ একটি চিত্র সংরক্ষণ করার জন্য নিম্নলিখিত পদ্ধতি প্রদান করে:

static boolean ImageIO.write(RenderedImage im, String formatName, File output)  throws IOException

টিউটোরিয়াল এটি ব্যাখ্যা করে

বাফারডেমেজ ক্লাসটি রেন্ডারডেমেজ ইন্টারফেস প্রয়োগ করে।

সুতরাং এটি পদ্ধতিতে ব্যবহার করতে সক্ষম।

উদাহরণ স্বরূপ,

try {
    BufferedImage bi = getMyImage();  // retrieve image
    File outputfile = new File("saved.png");
    ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
    // handle exception
}

writeএকটি কল ব্লক দিয়ে কলটি ঘিরে গুরুত্বপূর্ণ কারণ এপিআই অনুসারে পদ্ধতিটি IOException"লেখার সময় ত্রুটি দেখা দেয়"

আরও বিশদে পদ্ধতিটির উদ্দেশ্য, পরামিতি, রিটার্ন এবং নিক্ষেপগুলিও ব্যাখ্যা করা হয়েছে:

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

পরামিতি:

im - একটি রেন্ডারডেমেজ লেখা হবে।

formatName - একটি স্ট্রিং ফর্ম্যাটের অনানুষ্ঠানিক নামের সাথে যুক্ত।

আউটপুট - একটি ফাইল লিখতে হবে।

রিটার্নস:

কোনও উপযুক্ত লেখক পাওয়া না গেলে মিথ্যা।

ছোঁড়ার:

অবৈধআর্গুমেন্টএক্সেপশন - যদি কোনও প্যারামিটার শূন্য থাকে।

আইওএক্সেপশন - লেখার সময় যদি কোনও ত্রুটি ঘটে।

তবে formatNameএটি এখনও অস্পষ্ট এবং অস্পষ্ট মনে হতে পারে; টিউটোরিয়ালটি এটি কিছুটা সাফ করে দেয়:

ইমেজআইও.রাইট পদ্ধতিতে কোডটি কল করে যা পিএনজি "PNG রাইটার প্লাগ-ইন" ​​লেখার প্রয়োগ করে। ইমেজ আই / ও এক্সটেনসিবল হওয়ায় প্লাগ-ইন শব্দটি ব্যবহৃত হয় এবং এটি বিভিন্ন ধরণের বিন্যাসকে সমর্থন করতে পারে।

তবে নিম্নলিখিত মানক ইমেজ ফর্ম্যাট প্লাগইনগুলি: জেপিইজি, পিএনজি, জিআইএফ, বিএমপি এবং ডাব্লুবিএমপি সর্বদা উপস্থিত থাকে।

বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য এই স্ট্যান্ডার্ড প্লাগইনগুলির একটি ব্যবহার করা যথেষ্ট। সহজেই সহজলভ্য হওয়ার সুবিধা তাদের রয়েছে।

তবে, আপনি ব্যবহার করতে পারেন এমন অতিরিক্ত ফর্ম্যাটগুলি রয়েছে:

চিত্র I / O শ্রেণি অতিরিক্ত ফর্ম্যাটগুলি ব্যবহার করা যেতে পারে তার জন্য প্লাগ ইন করার একটি উপায় সরবরাহ করে এবং এরকম অনেকগুলি প্লাগইন বিদ্যমান। আপনি যদি আপনার সিস্টেমে লোড বা সংরক্ষণের জন্য কোন ফাইল ফর্ম্যাটগুলি উপলভ্য তা আগ্রহী হন তবে আপনি চিত্রআও ক্লাসের getReader FormatNames এবং getWriterFormatNames পদ্ধতি ব্যবহার করতে পারেন। এই পদ্ধতিগুলি এই জেআরইতে সমর্থিত সমস্ত ফর্ম্যাটগুলির তালিকাভুক্ত স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

String writerNames[] = ImageIO.getWriterFormatNames();

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

একটি পূর্ণ এবং ব্যবহারিক উদাহরণের জন্য, কেউ ওরাকেলের উদাহরণটি উল্লেখ করতে পারে SaveImage.java


9

Java.awt.image.buffered ইমেজ ফাইল তৈরি এবং সংরক্ষণ করুন:

import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class Main{
    public static void main(String args[]){
        try{
            BufferedImage img = new BufferedImage( 
                500, 500, BufferedImage.TYPE_INT_RGB );

            File f = new File("MyFile.png");
            int r = 5;
            int g = 25;
            int b = 255;
            int col = (r << 16) | (g << 8) | b;
            for(int x = 0; x < 500; x++){
                for(int y = 20; y < 300; y++){
                    img.setRGB(x, y, col);
                }
            }
            ImageIO.write(img, "PNG", f);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

মন্তব্য:

  1. MyFile.png নামে একটি ফাইল তৈরি করে।
  2. চিত্র 500 বাই 500 পিক্সেল।
  3. বিদ্যমান ফাইলটি ওভাররাইট করে।
  4. উপরের দিকে নীল স্ট্রাইপযুক্ত চিত্রটির রঙ কালো।

1
  1. আপনার প্রকল্প লাইব্রেরিতে imgscalr-lib-xxjar এবং imgscalr-lib-xx-javadoc.jar ডাউনলোড এবং যুক্ত করুন ।
  2. আপনার কোডে:

    import static org.imgscalr.Scalr.*;
    
    public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height)  {
        BufferedImage bi = image;
        bi = resize( image, scalrMethod, scalrMode, width, height);
    return bi;
    }
    
    // Save image:
    ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.