import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageThumb {
public static BufferedImage resize(BufferedImage source, int targetW,
int targetH) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
// 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
// 则将下面的if else语句注释即可
if (sx > sy) {
sx = sy;
targetW = (int) (sx * source.getWidth());
} else {
sy = sx;
targetH = (int) (sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { // handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW,
targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
// smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
public static void saveImageAsJpg(String fromFileStr, String saveToFileStr,
int width, int hight) throws Exception {
BufferedImage srcImage;
// String ex =
// fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile = new File(saveToFileStr);
File fromFile = new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if (width > 0 || hight > 0) {
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);
}
/**示例*/
public static void main(String argv[]) {
try {
// 参数1(from),参数2(to),参数3(宽),参数4(高)
ImageThumb.saveImageAsJpg("D:\\images\\op.jpg", "D:\\images\\op(mini).jpg",
200, 200);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
在Java编程中,处理图像操作是一项常见的任务,其中包括裁剪图片和更改图片尺寸。下面将详细介绍这三种方法。 首先,我们来谈谈使用第三方工具ImageMagick。ImageMagick是一款强大的命令行工具,能够处理各种图像...
在Java开发中,图片处理是一项常见的任务,包括压缩、裁剪、旋转以及添加水印等。`Thumbnails`是一个强大的库,它简化了这些操作,提供了直观且易于使用的API。本示例将深入讲解如何使用`Thumbnails`库进行图片处理...
在Java编程语言中,处理图像任务,如图片压缩和裁剪,是常见的需求。这些功能在Web开发、桌面应用或移动应用中都有广泛的应用。Java提供了多种库来帮助开发者完成这些任务,使得图像处理变得更加方便。本文将深入...
等比压缩是指保持原图宽高比例进行压缩,以避免图像失真,而裁剪则是根据特定需求去除图片的边缘或调整尺寸。 首先,我们需要引入处理图像的库。Java标准库提供了`java.awt.image.BufferedImage`类,可以用于读取、...
这个"java裁剪、缩放图片工具类"提供了这样的功能。它包含两个主要的组件:一个工具类(ImgUtils.java)和一个测试类(Test.java)。让我们深入探讨这两个类及其背后的图像处理原理。 首先,`ImgUtils.java`是核心...
在Java编程中,图片处理是一项常见的任务,包括图片的上传、尺寸控制、宽高调整以及裁剪和保存等操作。这些功能在Web应用、图像处理软件或者数据分析项目中都有广泛的应用。下面我们将深入探讨如何使用Java实现这些...
接收到数据后,Java代码需要解析前端传来的裁剪参数,然后使用图像处理库,如Java Advanced Imaging (JAI) 或 OpenCV,根据这些参数对原始图像进行裁剪。 在Java中,JAI是一个强大的图像处理库,它可以进行复杂的...
裁剪部分,可以通过解析用户提供的坐标和尺寸信息,动态地裁剪图片。如果使用了图像处理库,它们通常提供了方便的API来实现这一过程。 5. **响应返回**: 完成裁剪后,服务器需要将结果反馈给客户端。这可能是一个...
这个名为“用于裁剪图片的JAVA代码”的项目提供了一种实现方式,允许开发者根据指定的坐标和尺寸从原始图片中提取出部分图像。接下来,我们将深入探讨如何在Java中进行图片裁剪,以及可能涉及的关键知识点。 首先,...
当收到前端发送的裁剪参数和原始图片数据后,Java服务器会接收文件,解析裁剪参数,并使用图像处理库(如Java的ImageIO或第三方库如Imgscalr)根据参数对图片进行裁剪。裁剪后的图片可以被保存到服务器的特定目录,...
【标题】"jsp+CropZoom+jquery+java 图片缩放裁剪" 是一个基于Web的图像处理系统,主要用于实现用户在上传头像时进行自由裁剪的功能。这个项目使用了JSP(JavaServer Pages)作为后端动态网页技术,CropZoom作为前端...
在Java后端,你可以使用诸如`javax.imageio.ImageIO`类来读取和处理图片,根据前端传来的裁剪参数进行裁剪。例如,你可以创建一个裁剪方法: ```java public BufferedImage cropImage(BufferedImage source, ...
1. 图片裁剪(Crop):裁剪图片到指定的尺寸或特定区域,可能使用了Java的BufferedImage类和Graphics2D接口。 2. 图片缩放(Resize):调整图片大小,可以使用按比例缩放或者保持原图宽高比的方式。可能涉及的方法有...
Java 和 JavaScript 图片裁剪技术是网页开发中常见的功能,用于用户自定义选取图片的特定区域并进行裁剪。在给定的“java_CutImage.rar_java cutImage_js图片裁剪”主题中,我们将深入探讨这个过程的实现细节,包括...
这个过程包括读取原始图片,根据裁剪参数创建一个新的图像区域,然后保存裁剪后的图像。最后,裁剪好的头像可以存储到服务器的持久化存储如硬盘或云存储服务,并且更新用户的头像信息。 安全方面,需要注意的是,...
- **后端缩放**:在服务器端,可以使用Java的图像处理库,如`ImageIO`或`JavaFX`,根据指定尺寸重新调整图片大小。 5. **Java实现** - **Servlet处理**:Java Web应用通常使用Servlet来接收上传的文件,解析`...
在本项目中,用户可以上传个人头像,然后系统会对上传的图片进行裁剪,生成适合特定尺寸的头像。下面将详细讲解这个过程中的关键知识点。 1. **JSP(JavaServer Pages)**:JSP是Java的一种动态网页技术,它允许...
在Android开发中,图片裁剪是一项常见的功能,用于让用户选择并调整图片的显示区域,以满足特定的比例或尺寸需求。本篇文章将详细讲解如何在Android应用中实现自定义比例的图片裁剪,包括从相机拍照和相册选取图片后...
为了等比例缩放图片,我们需要获取原始图片的宽高比,然后根据目标尺寸计算出新的宽高。关键代码可能如下: ```java BufferedImage source = ImageIO.read(new File("input.jpg")); int width = source.getWidth...
`BufferedImage`的`getSubimage()`方法也可用于裁剪,但需确保新图像的尺寸与裁剪后的区域一致。 6. **找相似图像**: 寻找相似图像涉及到图像特征的提取和匹配,如颜色直方图、SIFT(尺度不变特征变换)或SURF...