Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Meningkatkan Kualiti Imej Selepas Mengecilkan Saiz di Java?

Bagaimanakah Saya Boleh Meningkatkan Kualiti Imej Selepas Mengecilkan Saiz di Java?

Mary-Kate Olsen
Lepaskan: 2024-12-20 19:29:10
asal
465 orang telah melayarinya

How Can I Improve Image Quality After Downsizing in Java?

Meningkatkan Kualiti Imej selepas Mengecilkan Saiz di Java

Seperti yang anda perhatikan, mengubah saiz imej kepada saiz yang lebih kecil dengan ketara boleh menyebabkan ketara kehilangan kualiti imej. Untuk membetulkan isu ini, pertimbangkan untuk melaksanakan perkara berikut:

Pendekatan Bahagi dan Takluk:

Daripada mengecilkan imej sekali gus, pecahkannya kepada langkah-langkah tambahan. Ini mengurangkan faktor skala keseluruhan, menghasilkan kualiti yang lebih baik.

Perenderan Dipertingkat:

Dalam kaedah resizeImage() anda, pastikan anda menetapkan pembayang pemaparan yang sesuai untuk dipertingkatkan algoritma interpolasi dan kualiti imej. Pertimbangkan untuk menggunakan pemalar seperti:

RenderingHints.VALUE_INTERPOLATION_BILINEAR
RenderingHints.VALUE_RENDER_QUALITY
RenderingHints.VALUE_ANTIALIAS_ON
Salin selepas log masuk

Pensampelan Semula:

Percubaan dengan algoritma pensampelan semula yang berbeza, seperti bikubik atau Lanczos, yang diketahui menghasilkan hasil yang lebih berkualiti apabila penskalaan imej atas atau bawah.

Sampel Kod:

Berikut ialah versi semakan kod anda yang menggabungkan penambahbaikan yang dicadangkan:

public static Boolean resizeImage(String sourceImg, String destImg, Integer Width, Integer Height, Integer whiteSpaceAmount) {
    BufferedImage origImage;

    try {
        origImage = ImageIO.read(new File(sourceImg));
        int type = origImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : origImage.getType();
        int fHeight = Height;
        int fWidth = Width;
        int whiteSpace = Height + whiteSpaceAmount; 

        double aspectRatio;

        // Determine resized dimensions
        if (origImage.getHeight() > origImage.getWidth()) {
            fHeight = Height;
            aspectRatio = (double)origImage.getWidth() / (double)origImage.getHeight();
            fWidth = (int)Math.round(Width * aspectRatio);
        } else {
            fWidth = Width;
            aspectRatio = (double)origImage.getHeight() / (double)origImage.getWidth();
            fHeight = (int)Math.round(Height * aspectRatio);
        }

        BufferedImage scaledImage = new BufferedImage(whiteSpace, whiteSpace, type);
        Graphics2D g = scaledImage.createGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, whiteSpace, whiteSpace);

        g.setComposite(AlphaComposite.Src);
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // Instead of scaling directly to fHeight/fWidth, do it in steps 
        int step = 2; 
        while (fHeight > 0 && fWidth > 0) {
            g.drawImage(origImage, (whiteSpace - fWidth)/2, (whiteSpace - fHeight)/2, fWidth, fHeight, null);
            origImage = scaledImage;
            fWidth /= step;
            fHeight /= step;
        }

        g.dispose();

        ImageIO.write(scaledImage, "jpg", new File(destImg));
    } catch (IOException ex) {
        return false;
    }

    return true;
}
Salin selepas log masuk

Dengan melaksanakan penambahbaikan ini, anda seharusnya melihat kualiti imej yang lebih baik apabila mengecilkan imej, terutamanya untuk faktor skala yang lebih besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meningkatkan Kualiti Imej Selepas Mengecilkan Saiz di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan