大家都知道一些比较常用的空间、博客、论坛,设置头像或上传图片到空间的时候都会自动生成帮你生产缩略图,在现在的网络中经常用到,这是用到了图片同比例缩放技术,下面我们通过一个实例来了解一下java中图片上传生成缩略图的方法以及图片上增加水印和调整水印的透明度。
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class ImageUtils {
/**
* 按源图比例缩放,生成高质量缩略图
*
* @param imageFile
* 源图文件
* @param thumbnailFile
* 要保存到的缩略图文件
* @param maxWidth
* 缩略图的最大宽度
* @param maxHeight
* 缩略图的最大高度
* @throws IOException
* 读取源图imageFile出错,或者用户指定的thumbnailFile无法被创建时
*/
public static void createThumbnail(File imageFile, File thumbnailFile,
int maxWidth, int maxHeight) throws IOException {
if (imageFile == null) {
throw new IllegalArgumentException("图片文件不能为空!");
}
if (thumbnailFile == null) {
throw new IllegalArgumentException("缩略图文件不能为空!");
}
if (maxWidth <= 0) {
throw new IllegalArgumentException("宽度必须大于0");
}
if (maxHeight <= 0) {
throw new IllegalArgumentException("高度必须大于0");
}
try {
BufferedImage image = ImageIO.read(imageFile);
/** 源图宽和高 */
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
if (maxWidth >= imageWidth && maxHeight >= imageHeight)
return;
/** 按比例缩放图像 */
double scaleZ = (double) imageWidth / imageHeight;
if (scaleZ > 0) {
imageWidth = maxWidth;
imageHeight = (int) (maxWidth / scaleZ);
} else {
imageWidth = (int) (maxHeight * scaleZ);
imageHeight = maxHeight;
}
/**根据源图和缩略图宽高生成一张图片 */
ImageFilter filter = new java.awt.image.AreaAveragingScaleFilter(
imageWidth, imageHeight);
ImageProducer producer = new FilteredImageSource(image.getSource(),
filter);
Image newImage = Toolkit.getDefaultToolkit().createImage(producer);
ImageIcon imageIcon = new ImageIcon(newImage);
Image scaleImage = imageIcon.getImage();
BufferedImage thumbnail = new BufferedImage(imageWidth,
imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = thumbnail.createGraphics();
g2d.drawImage(scaleImage, 0, 0, null);
g2d.dispose();
ImageIO.write(thumbnail, "jpeg", thumbnailFile);
} catch (IOException e) {
throw new IOException("不能生产缩略图文件,请检查文件!");
}
}
/**
* 给图片添加水印,并可调节水印图片的透明度
*
* @param tragetFile
* 目标图片文件
* @param watermarkFile
* 水印图片
* @param x
* 水印在目标图片的横坐标
* @param y
* 水印在目标图片的纵坐标
* @param alpha
* 透明度,必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字,值越小水印透明度越高
* @throws IOException
* 读取目标图片或水印图片出错时
*/
public static void makeWatermark(File tragetFile, File watermarkFile,
int x, int y, float alpha) throws IOException {
if (tragetFile == null) {
throw new IllegalArgumentException("图片文件不能为空");
}
if (watermarkFile == null) {
throw new IllegalArgumentException("缩略图不能为空");
}
if (alpha < 0 || alpha > 1) {
throw new IllegalArgumentException( "alpha必须是在0.0和1.1之间!");
}
try {
Image target = ImageIO.read(tragetFile);
int targetWidth = target.getWidth(null);
int targetHeight = target.getHeight(null);
Image watermark = ImageIO.read(watermarkFile);
int waterWidth = watermark.getWidth(null);
int waterHeight = watermark.getHeight(null);
BufferedImage bufferedImage = new BufferedImage(targetWidth,
targetHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bufferedImage.createGraphics();
/** 从(0,0)坐标开始,把目标图像画进去 */
g2d.drawImage(target, 0, 0, targetWidth, targetHeight, null);
/** 透明度设置 */
g2d.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_ATOP, alpha));
/** 根据制定坐标(x,y),把水印图像画进去 */
g2d.drawImage(watermark, x, y, waterWidth, waterHeight, null);
g2d.dispose();
ImageIO.write(bufferedImage, "jpeg", tragetFile);
} catch (IOException e) {
throw new IOException("不能读取文件,请检查目标文件及水印文件!");
}
}
public static void main(String[] args) {
try {
File file1 = new File("F:\\walerjava.gif");
createThumbnail(file1, new File("F:\\wj2.gif"), 50, 50);
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关推荐
10.可获取生成后的图片路径(水印图片路径、缩略图路径); 11.水印禁用和启用、缩略图禁用和启用; 12.生成图片的质量自定义调整; 13.图像处理(灰度、负片、亮度、对比度、RGB颜色),支持处理时加文字水印和logo...
/// 按模版比例最大范围的裁剪图片并缩放至模版尺寸 /// /// 吴剑 2012-08-08 /// 原图Stream对象 /// 保存路径 /// 最大宽(单位:px) /// 最大高(单位:px) /// 质量(范围0-100) public static void ...
2、批量添加图片水印:可以添加文字或者图片水印,设置水印任意位置,设置水印透明度。 3、批量转换图片格式:可以批量将图片转换成PNG、JPG、GIF、BMP、ICO、TIF等格式。 4、使用.net2.0内核,图片批量处理速度...
361du图片批量处理器 1.3 绿色版,可以对图片批量加水印,同时还可批量转换图片格式(支持批量将图片转换成PNG、JPG、GIF、BMP、ICO、TIF等格式)、批量按比例生成缩略图等,是一个小巧的图片处理小工具。...
靖源水印精灵是方便好用的批量水印处理软件,批量图片格式转换软件,批量图片裁切缩放软件,批量图片缩略图生成软件. 1. 支持批量生成水印. 2. 支持文字水印,图片水印,支持水印各种自定义格式(坐标,大小,字体,颜色,透明...
随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图。但完美主义者会发现一些问题,比如显示排版时想让相片缩略图列表非常统一、整齐、和美观,比如要求每张缩略图大小固定为120 x 90且不拉伸变形怎么办?再...
thumb(图片id或者路径, 宽度, 高度, 是否水印, 缩放标准值, 是否下载远程图片进行剪切) 缩略图地址:{thumb($字段名, 100, 100)} 缩略图带上水印地址:{thumb($字段名, 100, 100, 1)} 强制高度、强制宽度:{thumb($...
10、拥有强大的水印工具,支持文字,图片水印,可以设置阴影,位置,透明度等。 11、具有回收站功能,再也不怕删除错了恢复不回来。 12、带有数据库备份和还原的功能,再也不用担心不会备份还原烦恼了。 13、系统...
√ 〖文字签名〗用户可设定5个签名及背景,文字背景还可以任意设定颜色和透明度 √ 〖图片签名〗在照片的任意位置印上自己设计的水印,支持PNG、PSD等半透明格式的文件,水印随心所欲 √ 〖轻松边框〗轻松制作多种...
文字背景还可以任意设定颜色和透明度 √ 〖图片签名〗在照片的任意位置印上自己设计的水印,支持PNG、PSD等半透明格式的文件,水印随心所欲 √ 〖轻松边框〗轻松制作多种相片边框,如胶卷式、白边式等等 √...
可设置一系列动作,一按即自动完成所有操作 √ 〖批量处理〗支持批量缩放、批量正片等,适合大量冲印前处理 √ 〖文字签名〗用户可设定5个签名及背景,文字背景还可以任意设定颜色和透明度 √ 〖图片签名〗...