Maison > Java > javaDidacticiel > Comment puis-je améliorer la qualité de l'image après une réduction en Java ?

Comment puis-je améliorer la qualité de l'image après une réduction en Java ?

Mary-Kate Olsen
Libérer: 2024-12-20 19:29:10
original
486 Les gens l'ont consulté

How Can I Improve Image Quality After Downsizing in Java?

Amélioration de la qualité de l'image après une réduction de la taille en Java

Comme vous l'avez remarqué, redimensionner une image à une taille nettement plus petite peut entraîner une perte notable perte de qualité d’image. Pour remédier à ce problème, envisagez de mettre en œuvre les éléments suivants :

Approche Diviser pour mieux régner :

Au lieu de réduire l'image d'un seul coup, décomposez-la en étapes incrémentielles. Cela réduit le facteur d'échelle global, ce qui entraîne une meilleure qualité.

Rendu amélioré :

Dans votre méthode resizeImage(), assurez-vous de définir des conseils de rendu appropriés pour améliorer l'algorithme d'interpolation et la qualité de l'image. Pensez à utiliser des constantes telles que :

RenderingHints.VALUE_INTERPOLATION_BILINEAR
RenderingHints.VALUE_RENDER_QUALITY
RenderingHints.VALUE_ANTIALIAS_ON
Copier après la connexion

Rééchantillonnage :

Expérimentez avec différents algorithmes de rééchantillonnage, tels que bicubique ou Lanczos, qui sont connus pour produire des résultats de meilleure qualité lors de la mise à l'échelle images vers le haut ou vers le bas.

Échantillon Code :

Voici une version révisée de votre code qui intègre les améliorations suggérées :

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;
}
Copier après la connexion

En implémentant ces améliorations, vous devriez constater une qualité d'image améliorée lors de la réduction de la taille des images, en particulier pour facteurs à plus grande échelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal