之前写过一个图片缩放的功能,对于大幅度缩小,效果很差,这里做了小部分改进
原理是缩小的时候不是一次就缩小完,而是分成几次缩小,这样的好处是算法对像素的计算更加准确,
final int bs = 2; int currentWidth = source.getWidth(); int currentHeight = source.getHeight(); BufferedImage tempImage = new BufferedImage(currentWidth, currentHeight, source.getType()); Graphics2D g = tempImage.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.setComposite(AlphaComposite.Src); int startWidth = targetW; int startHeight = targetH; while (startWidth < currentWidth && startHeight < currentHeight) { startWidth *= bs; startHeight *= bs; } currentWidth = startWidth / bs; currentHeight = startHeight / bs; g.drawImage(source, 0, 0, currentWidth, currentHeight, null); while ((currentWidth >= targetW * bs) && (currentHeight >= targetH * bs)) { currentWidth /= bs; currentHeight /= bs; if (currentWidth < targetW) currentWidth = targetW; if (currentHeight < targetH) currentHeight = targetH; g.drawImage(tempImage, 0, 0, currentWidth, currentHeight, 0, 0, currentWidth * bs, currentHeight * bs, null); } g.dispose(); Graphics2D destg = target.createGraphics(); destg.drawImage(tempImage, 0, 0, targetW, targetH, 0, 0, currentWidth, currentHeight, null); destg.dispose();
其中: RenderingHints.KEY_INTERPOLATION RenderingHints.VALUE_INTERPOLATION_BILINEAR
API说明如下:
插值提示值——图像中最接近整数坐标样本的 4 种颜色样本被线性地插入,以生成一个颜色样本。从概念上讲,图像被视为一组无穷小的点颜色样本,其值只位于整数坐标像素的中心,而且这些像素中心之间的空间是用线性延伸的颜色填充的,并用直线连接相邻的离散样本。 当放大图像时,因为有 NEAREST_NEIGHBOR,在图像中的颜色之间没有斑驳模糊边缘,但是混合可能沿样本排列的水平和垂直边缘显示一些微小的间断,这是由于插值斜面从样本的一侧到另一侧的突然更改造成的。当缩小图像时,更多图像像素具有它们自己的以结果输出表示的颜色样本,因为每个输出像素都从多达 4 个图像像素中接收颜色信息。
在这种情况下,图片缩小后的质量比较可观,
也可换成其它值,比如
RenderingHints.VALUE_INTERPOLATION_BICUBIC
具体看API说明。
相关推荐
java图片缩放 java缩略图 缩略图 java图片处理
一、图片缩放 1. 使用`BufferedImage`类: Java的`java.awt.image`包提供了`BufferedImage`类,可以用来读取、创建和操作图像。通过`Graphics2D`对象,我们可以对`BufferedImage`进行缩放操作。以下是一个简单的...
本文将深入探讨如何使用Java进行图片缩放处理,并确保在压缩过程中尽可能减少失真,同时允许自定义压缩后的图片质量。 首先,我们需要了解Java中的核心库`java.awt.image`和`javax.imageio`,它们提供了处理图像的...
在Java编程领域,图片处理是一项常见的任务,其中图像缩放是尤为重要的操作。当我们需要调整图片大小,以适应不同的应用场景,如网页、移动设备或打印等,就需要进行图像缩放。本文将深入探讨Java中实现图像缩放的...
要使用ImageMagick在Java中进行图片缩放,首先需要在系统中安装ImageMagick,然后添加`Imagemagick-Java`库到项目中。这个库通常以JAR文件的形式提供,可以将其添加到项目的类路径中。 接下来,我们需要了解如何...
根据提供的文件信息,我们可以总结出以下关于“Java图片缩放类”的相关知识点: ### Java 图片缩放类概述 在Java开发中,处理图像时经常需要进行缩放操作以适应不同的显示需求或优化资源占用。Java 提供了多种库来...
在Java编程中,图片缩放是一项常见的任务,特别是在开发图形用户界面(GUI)或处理图像数据时。这个主题涉及到图像处理的基本概念、Java中的图像API以及如何使用它们来实现缩放功能。以下是对这一主题的详细说明: ...
高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)
Java图片缩放器源码是用于处理图像大小调整的程序,它可以帮助开发者在不损失过多图像质量的情况下,将图片按照指定比例进行放大或缩小。在Java编程语言中,实现这样的功能通常涉及到对图像处理库的使用,如Java的...
【标题】"jsp+CropZoom+jquery+java 图片缩放裁剪" 是一个基于Web的图像处理系统,主要用于实现用户在上传头像时进行自由裁剪的功能。这个项目使用了JSP(JavaServer Pages)作为后端动态网页技术,CropZoom作为前端...
图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。
以上就是使用Java AWT进行图片缩放的基本步骤。在实际应用中,可能还需要考虑性能优化、异常处理以及支持不同格式的图片文件等细节。通过调整缩放算法和质量参数,我们可以获得更高质量的缩放结果。学习和掌握这些...
包含了一些java对图片操作处理的方法: 1.给图片添加图片水印 2.给图片添加文字水印 3.图片缩放 *主方法测试代码简单易懂
在压缩包中的"java图片大小转换"文件中,很可能包含了实现这些功能的示例代码和使用说明,可以参考学习以加深理解。在实际开发中,我们还可以借助第三方库如`ImageMagick`、`Java Advanced Imaging (JAI)`或`JavaFX`...
Java GIF图片缩放是开发过程中常见的一项任务,尤其是在处理动态图像时。GIF是一种支持动画的格式,广泛用于网络上。在Java中处理GIF图片,我们通常会使用到一些库,比如`gif4j`,这是一个轻量级且功能强大的Java库...
本教程将专注于使用Java语言实现图片的等比缩放和压缩技术,以满足存储和传输的需求。下面,我们将深入探讨这些关键知识点。 首先,我们来了解等比缩放。等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片...
4. **图片缩放** - **前端缩放**:使用CSS的`transform`属性,可以实现图片的缩放效果,但这仅限于视觉上的缩放,不会改变图片的实际大小。 - **后端缩放**:在服务器端,可以使用Java的图像处理库,如`ImageIO`或...
在Authorware这个强大的多媒体创作工具中,图片缩放是一个常用的操作,它可以帮助用户根据需要调整图像的大小,适应不同的展示需求。以下将详细介绍如何在Authorware中进行图片缩放以及相关的知识点。 一、...
在Java中,可以使用`java.awt.Graphics2D`类来实现图片缩放。以下是一个简单的按比例缩放的例子: ```java import java.awt.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java....