0

私はJavaが初めてです。大きなサイズの png ファイルを縦横比を維持して標準のファイル サイズにリサイズしました。以下は、私が使用したコードスニペットです。しかし、このコード スニペットに見られる欠点は、サイズを変更した後、ファイル サイズが元のサイズよりもはるかに大きくなることです。たとえば、オリジナルは 5kb で、サイズ変更された新しいものは 16kb です。

サイズ変更時にこのファイルサイズが大きくなるのを避けるために親切に助けてください

 public void SaveImage(String imagePath, BufferedImage image) {
        try {
            BufferedImage bi = image;
            File newImageFile = new File(imagePath);
            ImageIO.write(bi, "png", newImageFile);
        } catch (IOException e) {

        }
    }

    public BufferedImage resizeImage(final Image image, Dimension newDimension) {
        final BufferedImage bufferedImage = new BufferedImage(newDimension.width, newDimension.height, BufferedImage.TYPE_INT_RGB);
        final Graphics2D graphics2D = bufferedImage.createGraphics();
        //graphics2D.setComposite(AlphaComposite.Src);

        graphics2D.drawImage(image, 0, 0, newDimension.width, newDimension.height, null);
        graphics2D.dispose();

        return bufferedImage;
    }
4

1 に答える 1

0

PNG 圧縮は次のように機能します。予測子を使用して以前の値からピクセル値を予測し、結果の差分変更を 'zip' で圧縮します。画像内に存在する低周波コンテンツが多いほど、PNG はより適切に圧縮できます。

サイズを変更するとコンテンツが変更され、より適切に圧縮できるロングランを PNG プレディクターが検出できなくなる可能性があります。画像を縮小すると高周波が強調され、エントロピーが高くなり、圧縮率が低くなります。

または、ImageIOライターが原因で、PNG に最適な圧縮方法が設定されていない可能性があります。ImageWriterとそのを見てくださいImageWriterParamImageWriterで入手できますImageIO.getImageWritersByFormatName(String formatName)

于 2012-12-13T09:26:22.283 に答える