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
Mary-Kate Olsenasal
2024-12-20 19:29:10396semak imbas

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

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;
}

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:
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