pngquant java,java - 与TinyPNG类似的库,用于Java-压缩图像大小 - SO中文参考 - www.soinside.com...

我正在一个允许用户上传图像并对其进行裁剪的网站上。我将每个图像都转换为.PNG,以获得更好的质量。我遇到的问题是图片大小。

如果我上传200 kb的图像,则在裁剪并使其PNG后具有600 kb的图像。这不是我的解决方案,因为图像以BLOB形式存储在数据库中,并且网站加载速度较慢。

我正在尝试找到一种方法来压缩png,使其具有较小的尺寸,而不降低质量。

我找不到用于此问题的任何库或解决方案。我需要像TinyPNG这样的Java语言。

这是我的方法:BufferedImage resizedImage = resizeImage(image,extension,width,height);

System.out.println("dimensiuni:" + resizedImage.getHeight()+ "x" + resizedImage.getWidth());

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageIO.write( resizedImage, "png", baos );

baos.flush();

byte[] imageInByte = baos.toByteArray();

baos.close();

这是resizeImage函数:public BufferedImage resizeImage(BufferedImage image, String extension, int targetWidth, int targetHeight) {

int type = (image.getTransparency() == Transparency.OPAQUE) ?

BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;

BufferedImage ret = (BufferedImage)image;

int w, h;

w = image.getWidth();

h = image.getHeight();

do {

if (w > targetWidth) {

w /= 2;

if (w < targetWidth) {

w = targetWidth;

}

}

if ( h > targetHeight) {

h /= 2;

if (h < targetHeight) {

h = targetHeight;

}

}

BufferedImage tmp = new BufferedImage(w, h, type);

Graphics2D g2 = tmp.createGraphics();

g2.setComposite(AlphaComposite.Src);

g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g2.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_DEFAULT);

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);

g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);

g2.drawImage(ret, 0, 0, w, h, null);

g2.dispose();

ret = tmp;

tmp.flush();

} while (w != targetWidth || h != targetHeight);

return ret;

}

帮帮我!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值