import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageUtil {
private static final Log logger = LogFactory.getLog(ImageUtil.class);
public ImageUtil() {
}
public static void reduceImg(String imgsrc, String imgdist, int widthdist,
int heightdist) {
try {
File srcfile = new File(imgsrc);
if (!srcfile.exists()) {
return;
}
Image src = javax.imageio.ImageIO.read(srcfile);
int width = src.getWidth(null);
int height = src.getHeight(null);
if (width <= widthdist && height <= heightdist) {
FileUtil.copyFileTo(new File(imgsrc), imgdist);
return;
}
float wh = (float) width / (float) height;
if (wh > 1) {
float tmp_heigth = (float) widthdist / wh;
BufferedImage tag = new BufferedImage(widthdist,
(int) tmp_heigth, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, widthdist,
(int) tmp_heigth, null);
String distFilePath = FileUtil.getFileNameVerifyExists(imgdist);
FileUtil.makeDirectory(distFilePath);
FileOutputStream out = new FileOutputStream(imgdist);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);
param.setQuality(.85F, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(tag);
out.close();
} else {
if (width <= widthdist && wh > 0.1f) {
// FileUtils.copyFile(new File(imgsrc), new File(imgdist));
FileUtil.copyFileTo(new File(imgsrc), imgdist);
return;
}
if (width > widthdist && wh > 0.1f) {
float tmp_heigth = (float) widthdist / wh;
BufferedImage tag = new BufferedImage(widthdist,
(int) tmp_heigth, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, widthdist,
(int) tmp_heigth, null);
String distFilePath = FileUtil
.getFileNameVerifyExists(imgdist);
FileUtil.makeDirectory(distFilePath);
FileOutputStream out = new FileOutputStream(imgdist);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder
.getDefaultJPEGEncodeParam(tag);
param.setQuality(.85F, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(tag);
out.close();
return;
}
float tmp_width = (float) heightdist * wh;
BufferedImage tag = new BufferedImage((int) tmp_width,
heightdist, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, (int) tmp_width,
heightdist, null);
String distFilePath = FileUtil.getFileNameVerifyExists(imgdist);
FileUtil.makeDirectory(distFilePath);
FileOutputStream out = new FileOutputStream(imgdist);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);
param.setQuality(.85F, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(tag);
out.close();
}
} catch (IOException ex) {
logger.error(ex);
}
}
public static void createThumb(String srcImagePath, String distImagePath,
int width, int height) {
// String dir = FileService.createDynanmicalDir(saveThumbBasePath,
// StringUtil.getRandom());
// String location = "/" + dir + "/" + fileName;
String imgdist = distImagePath;
String imgsrc = srcImagePath;
reduceImg(imgsrc, imgdist, width, height);
}
public static void main(String[] args) {
reduceImg("d:\\DSC04272.JPG","d:\\00000002.jpg",100,100);
}
}
分享到:
相关推荐
为了实现切图功能,可以使用JavaScript库如Cropper.js,它提供了丰富的API供用户交互式地裁剪图片。用户在前端选定需要的部分,然后通过Ajax将裁剪的坐标和比例传给服务器,服务器根据这些信息裁剪图片。 在PHP中,...
标题中的“ps批量切图.rar”表明这是一个与Photoshop相关的压缩包,其核心功能是帮助用户批量处理图片切图工作,提高工作效率。在网页设计和移动应用开发过程中,切图是一项必不可少的步骤,它涉及到将设计稿中的...
其次,"ZoomImageDemo56d73cbc-e41a-4c97-b307-228ca3313136.zip"可能是一个带有缩放功能的图片切图源码。在某些情况下,用户可能需要放大图片以精确地选取切图区域。这个示例可能实现了图片的放大缩小功能,用户...
在iOS应用中,图片切图是一个常见的操作,它有助于减少应用的加载时间、提高性能并优化显示效果。下面我们将详细探讨与这个主题相关的知识点。 1. **图片比例**: - 4:3比例是传统显示器和许多设备屏幕的标准比例...
影像切图工具,使用ArcEngine10和C#开发 .
java 图片处理 切图代码 实现自动缩放图片
QQ图片专用切图工具的问世,无疑给广大QQ用户带来了一款高效的截图伴侣。 QQ图片专用切图工具是一款精简型的图形图像处理软件,它的设计初衷是为了满足QQ用户的特殊需求,提供便捷的截图与简单编辑功能。该工具的v...
Java 实现图片切图和判断图片是否为纯色/彩色图片 Java 语言是当今最流行的编程语言之一,在图像处理方面也具有很强的功能。本文将详细介绍如何使用 Java 语言实现图片切图和判断图片是否为纯色/彩色图片。 图片...
3、不会的开发者人,下载后可以快速上手实现图片切图功能 4、主要功能有:是否裁剪的宽度固定、是否裁剪的高度固定、是否禁用旋转、是否锁定比例、是否限制移动、通过链接地址或打开视频本地图片选择裁剪图片、上下...
这个场景描述的“图片轮播,点击切图,鼠标移动切图,广告栏关闭”涉及了几个关键的技术点,下面将逐一进行详细解释。 1. 图片轮播(Slideshow): 图片轮播通常用于网站的首页或产品展示区域,以有限的空间展示多...
在数字媒体和网页设计领域,高效的工作流程至关重要,其中图片切图环节就是不可或缺的一环。本文将深入探讨一款名为"Cutterman"的高效切图软件插件,它以其独特的优势,极大地提升了设计师的工作效率。 Cutterman是...
"切图工具 图片纸剪刀"是一款专为网页设计者和开发者打造的高效图片处理软件,其主要功能是帮助用户快速、精确地裁剪图片,以适应网页设计的需求。这款工具虽然功能相对简单,但因其轻量级的特性而备受青睐。下面将...
"2D游戏切图工具"就是专为了解决这个问题而设计的,它可以帮助开发者高效地切割游戏场景、角色以及各种元素的图片,以便在游戏运行时更流畅地加载和显示。这款工具基于Flash Air技术,提供了对怪物点、障碍点和移动...
【中间图片放大,两边缩小,轮播效果】是一种常见的网页设计技术,主要应用于网站的头部或者产品展示区域,用于吸引用户的注意力。这种效果通过动态改变图片的大小和位置,营造出一种视觉焦点转移的动画效果,使用户...
标题中的“此处是问题图片,文章中使用”可能指的是在iOS应用开发过程中遇到的与图片显示或处理相关的问题,而描述中的“蓝湖切图文件是原有图片、无问题图片”则提到了一种解决方法——使用蓝湖工具进行图片切图。...
听风海量切图王1.2正是为了满足这一需求而设计的高效图片处理工具,它以实现图片的快速分割为特色,极大地方便了图片编辑者在图像处理和设计中的需求。 ### 图片打开与预览功能 听风海量切图王1.2具备强大的图片...
在切图过程中,JavaScript可能用于处理图片的懒加载、响应式布局调整、交互效果等。 在实际操作中,切图的步骤通常包括: 1. **设计稿准备**:设计师使用Adobe Photoshop、Sketch或Figma等工具创建网页设计稿,...
本文将围绕“切图工具及切图效果”这一主题,详细介绍切图的基本概念、常见工具以及如何通过这些工具实现高质量的切图效果。 首先,我们需要理解切图的基本步骤。通常,设计师会使用Adobe Photoshop、Sketch或Figma...
### 栅格地图切图工具及栅格图片转换工具使用说明 #### 一、概述 本文档旨在详细介绍栅格地图切图工具以及栅格图片转换工具的使用方法,特别是针对PGIS平台栅格地图生成工具及其相关的转换工具,如转换为ArcGIS...