/**
* 图片缩放
* @param originalFile 源文件
* @param resizedFile 目标文件
* @param newWidth 新图片的宽度
* @param quality 成像质量
* @throws IOException
*/
public static void resize(File originalFile, File resizedFile,
int newWidth, float quality) throws IOException {
if (quality > 1) {
throw new IllegalArgumentException(
"Quality has to be between 0 and 1");
}
ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
Image i = ii.getImage();
Image resizedImage = null;
int iWidth = i.getWidth(null);
int iHeight = i.getHeight(null);
if (iWidth > iHeight) {
resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)
/ iWidth, Image.SCALE_AREA_AVERAGING);
} else {
resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight,
newWidth, Image.SCALE_AREA_AVERAGING);
}
// This code ensures that all the pixels in the image are loaded.
Image temp = new ImageIcon(resizedImage).getImage();
// Create the buffered image.
BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),
temp.getHeight(null), BufferedImage.TYPE_INT_RGB);
// Copy image to buffered image.
Graphics g = bufferedImage.createGraphics();
// Clear background and paint the image.
g.setColor(Color.white);
g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));
g.drawImage(temp, 0, 0, null);
g.dispose();
// Soften.
float softenFactor = 0.05f;
float[] softenArray = { 0, softenFactor, 0, softenFactor,
1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };
Kernel kernel = new Kernel(3, 3, softenArray);
ConvolveOp cOp = new ConvolveOp(kernel,
ConvolveOp.EDGE_NO_OP, null);
bufferedImage = cOp.filter(bufferedImage, null);
// Write the jpeg to a file.
FileOutputStream out = new FileOutputStream(resizedFile);
// Encodes image as a JPEG data stream
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder
.getDefaultJPEGEncodeParam(bufferedImage);
param.setQuality(quality, true);
encoder.setJPEGEncodeParam(param);
encoder.encode(bufferedImage);
}
Image.SCALE_AREA_AVERAGING为缩放算法,可根据需求查API选择不同的缩放算法。
分享到:
相关推荐
同时,根据具体需求,还可以扩展这个工具类,添加更多的功能,如保持原始宽高比、自适应缩放、质量设置等。 总之,Java中的图像处理功能强大且灵活,通过理解基本原理和使用适当的库,我们可以轻松实现各种图像操作...
要使用ImageMagick在Java中进行图片缩放,首先需要在系统中安装ImageMagick,然后添加`Imagemagick-Java`库到项目中。这个库通常以JAR文件的形式提供,可以将其添加到项目的类路径中。 接下来,我们需要了解如何...
本文将深入探讨如何使用Java进行图片缩放处理,并确保在压缩过程中尽可能减少失真,同时允许自定义压缩后的图片质量。 首先,我们需要了解Java中的核心库`java.awt.image`和`javax.imageio`,它们提供了处理图像的...
一、图片缩放 1. 使用`BufferedImage`类: Java的`java.awt.image`包提供了`BufferedImage`类,可以用来读取、创建和操作图像。通过`Graphics2D`对象,我们可以对`BufferedImage`进行缩放操作。以下是一个简单的...
总之,Java提供了强大的图像处理能力,通过理解`BufferedImage`和`Graphics2D`,我们可以方便地实现图片缩放功能,同时考虑到缩放质量、性能和代码的可维护性。在进行图像处理时,记得根据项目需求选择合适的缩放...
在Java编程语言中,图像处理是一项常见的任务,其中包括图片的加载、...通过调整缩放算法和质量参数,我们可以获得更高质量的缩放结果。学习和掌握这些技术对于进行复杂的图像处理和图形用户界面开发是非常有帮助的。
为了等比例缩放图片,我们需要获取原始图片的宽高比,然后根据目标尺寸计算出新的宽高。关键代码可能如下: ```java BufferedImage source = ImageIO.read(new File("input.jpg")); int width = source.getWidth...
Java GIF图片缩放是开发过程中常见的一项任务,尤其是在处理动态图像时。GIF是一种支持动画的格式,广泛用于网络上。在Java中处理GIF图片,我们通常会使用到一些库,比如`gif4j`,这是一个轻量级且功能强大的Java库...
本教程将专注于使用Java语言实现图片的等比缩放和压缩技术,以满足存储和传输的需求。下面,我们将深入探讨这些关键知识点。 首先,我们来了解等比缩放。等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片...
在Authorware这个强大的多媒体创作工具中,图片缩放是一个常用的操作,它可以帮助用户根据需要调整图像的大小,适应不同的展示需求。以下将详细介绍如何在Authorware中进行图片缩放以及相关的知识点。 一、...
在Java中,可以使用`java.awt.Graphics2D`类来实现图片缩放。以下是一个简单的按比例缩放的例子: ```java import java.awt.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java....
除了Java 2D API,还可以使用前面提到的图像处理库,它们可能提供更高级的特性,如高质量缩放算法,但可能会增加项目依赖。 在处理用户上传的图片时,安全性是必须考虑的。避免文件覆盖、检查文件类型和大小限制、...
但从提供的部分来看,已经足以说明如何使用Java的标准库进行高质量图片缩放的基本原理和实现方式。 最后,由于文档内容是通过OCR扫描出来的,所以可能有一些字词识别不准确。但是通过上下文推敲,我们可以理解并...
因此,掌握Java中图片缩放的技术对于开发高质量的应用程序至关重要。 #### 二、关键知识点分析 ##### 2.1 图片缩放的基本原理 图片缩放主要涉及两种操作:缩小和放大。缩小是指减少图片的分辨率,使其在屏幕上显示...
Java图片缩放器源码是用于处理图像大小调整的程序,它可以帮助开发者在不损失过多图像质量的情况下,将图片按照指定比例进行放大或缩小。在Java编程语言中,实现这样的功能通常涉及到对图像处理库的使用,如Java的...
这种技术广泛应用于高质量的图像显示和打印。 在Java编程语言中,我们可以使用多种库来实现不失真的图片缩放,如Java AWT和Swing库中的`BufferedImage`类。以下是一个简单的示例,展示了如何使用Java实现不失真的...
"用JAVA获取视频文件中的帧图片并等比缩放" Java是获取视频文件中的帧图片并等比缩放的重要技术之一。该技术可以应用于视频处理、图像处理、多媒体处理等领域。通过使用Java语言和javacv库,我们可以快速获取视频...
EGCodec.createJPEGEncoder(out); JPEGEncodeParam param = ...总的来说,这段Java代码提供了一个实用的工具,能够在不失真过大(通过调整压缩质量)的前提下,根据图片原始大小智能地压缩图片,满足不同场景的需求。
图片处理库如Imgscalr、JavaFX或Google的Guava提供更高级的功能,如高质量的缩放算法、更复杂的裁剪选项等。例如,Imgscalr库提供了一个简单的API,可以快速缩放图片,同时保持良好的图像质量。 7. **性能优化** ...