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();
}
}
}
分享到:
相关推荐
一共包含了三种方法对于图片尺寸的修改———— 一种是使用第三方工具 ImageMagick 两种使用java自带类进行修改。
java 处理图片大小等比例缩放;图片裁剪;支持图片压缩不失真;支持图片添加水印;支持动态图的处理;支持自定义图片大小的转换 等 压缩包中内附使用说明
主要介绍了Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java图片处理工具类,支持图片裁剪,图片根据尺寸缩放,图片根据宽度缩放,图片加水印等功能cutImage。
很多网站都会用到对图片的一些处理,包括图片的裁剪、给图片加水印、按比例缩放图片等操作,用ImageMagick实现这些功能,性能非常好,图片还不会失真. 本文档详细的介绍了 GraphicsMagick+im4java的搭建过程,对...
jsp可视化截取上传图片的大小,适用于用户上传尺寸过大图片(头像)后可视化截取图片大小,此例子实现了对一张图片任意截取大小,作适当修改后适用范围较广!
主要介绍了Java实现的不同图片居中剪裁生成同一尺寸缩略图功能,涉及java针对图片的读取、属性修改等相关操作技巧,需要的朋友可以参考下
为了提升用户体验,网站用户在上传图片的时候,我们不能够让用户自己去处理图片以达到我们的要求。 而通常像淘宝上商品实物展示这样的页面,我们需要控制的主要是图片的宽度。 又考虑到html页面解析顺序可能导致的...
目录客制化最大输出尺寸固定输出尺寸裁剪模式MinimumFrameSize InitialFrameScale 保存和还原FrameRect 颜色行程重量和手柄尺寸处理触摸填充处理和引导ShowMode 动画片毕加索和Glide的兼容性除错XML属性对于Xamarin ...
它采用Android Studio开发,基于Java和Kotlin编程语言,利用了Android SDK提供的各种特性和第三方库,实现了高效的图片加载、缩放、裁剪等操作。 该图片浏览器具有以下特点: 1. 支持多种图片格式,包括JPEG、PNG...
4. 响应式设计:Android 应用程序可以根据设备类型、屏幕尺寸等因素调整布局和显示方式,以适应不同的设备和用户需求。 5. 多媒体支持:Android 支持常见的音频、视频、图像等多媒体格式,可以实现各种多媒体应用。 ...
此应用程序允许用户创建带有自动图片大小和旋转裁剪的护照照片,以符合大多数国家/地区接受的标准。 用户会得到一张您最喜欢的打印格式(例如 4"x6" 或 5"x7")的平铺照片,并准备好打印的适当分辨率。 此应用程序的...
完全仿微信的图片选择,并且提供了多种图片加载接口,选择图片后可以旋转,可以裁剪成矩形或圆形,可以配置各种其他的参数 类似QQ空间,微信朋友圈,微博主页等,展示图片的九宫格控件 类似淘宝的商品详情页,继续...
4、 调整幻灯片尺寸,手机端完美匹配官方幻灯片,其他app幻灯片需要自己作图,不然图片会被裁剪得面目全非!(已完成) 5、观看激励视频奖励的观影次数在后台全局广告里配置次数十分方便!(已完成) 6、增加一键登录功能,...
如果你的内存不足,请在Parallel Preferences中手动降低并行池的尺寸。降低并行数可以有效减少内存占用,但也会显着增加时间消耗。如果你的内存不足以支持多线程,也可以使用单线程模式的Oir2TiffSingle。首次启动...
setBufferSize : 设置缓冲区尺寸 文件相关 -> FileUtils.java -> Test getFileByPath : 根据文件路径获取文件 isFileExists : 判断文件是否存在 rename : 重命名文件 isDir : 判断是否是目录 isFile : 判断是否是...
使用GLSurfaceView实现预览,在onDrawFrame()中对SurfaceView的尺寸做裁剪。 更改hal层config.ftbl.common_raw.h文件,由驱动层处理。 以MIUI9 拥有的方形预览为例,接下来分析各种方法的实现: ##1.使用遮罩,盖住...
能获知图片的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。 16.★每个栏目可拥有独立的私有特定的HTML,可以无损后显示在栏目的显示页中...