package cn.zh.utils;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* 图片工具类
*/
public class ImageUtils {
private ImageUtils(){}
private BufferedImage image = null;
public void load(File imageFile) throws IOException {
image = ImageIO.read(imageFile);
}
public int getImageWidth() {
return image.getWidth();
}
public int getImageHeight() {
return image.getHeight();
}
//图片裁剪
public void cutTo(int x,int y,int tarWidth, int tarHeight) throws FileNotFoundException {
if (image == null) {
throw new FileNotFoundException(
"image file not be load.please execute 'load' function agin.");
}
int iSrcWidth = getImageWidth(); // 得到源图宽
int iSrcHeight = getImageHeight(); // 得到源图长
// 如果源图片的宽度或高度小于目标图片的宽度或高度,则直接返回出错
if (iSrcWidth < tarWidth || iSrcHeight < tarHeight) {
throw new RuntimeException("source image size too small.");
}
// 先求源图和目标图的尺寸比例
double dSrcScale = iSrcWidth * 1.0 / iSrcHeight;
double dDstScale = tarWidth * 1.0 / tarHeight;
// 先确定剪裁尺寸
int iDstLeft, iDstTop, iDstWidth, iDstHeight;
if (dDstScale > dSrcScale) { // 目标图片宽
iDstWidth = iSrcWidth;
iDstHeight = (int) (iDstWidth * 1.0 / dDstScale);
} else { // 目标图片高
iDstHeight = iSrcHeight;
iDstWidth = (int) (iDstHeight * dDstScale);
}
iDstLeft = (iSrcWidth - iDstWidth) / 2;
iDstTop = (iSrcHeight - iDstHeight) / 2;
// 剪裁
this.image = image
.getSubimage(x, y, tarWidth, tarHeight);
}
/**
* //图片缩放 不生成新的图片
*/
public void zoomTo(int tarWidth, int tarHeight) {
BufferedImage tagImage = new BufferedImage(tarWidth, tarHeight,
BufferedImage.TYPE_INT_RGB); // 缩放图像
Image image = this.image.getScaledInstance(tarWidth, tarHeight,
Image.SCALE_SMOOTH);
Graphics g = tagImage.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制目标图
g.dispose();
this.image = tagImage;
}
/**
* 保存
* @param fileName
* @param formatName
* @throws IOException
*/
public void save(String fileName, String formatName) throws IOException {
// 写文件
FileOutputStream out = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(this.image, formatName, bos);// 输出到bos
out = new FileOutputStream(fileName);
out.write(bos.toByteArray()); // 写文件
} catch (IOException e) {
throw e;
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* //缩放图片 生成新的图片
*/
public static boolean zoomImage(String srcFile, String dstFile, int width,
int height, String formatName) {
try {
ImageUtils zoom = new ImageUtils();
zoom.load(new File(srcFile));
zoom.zoomTo(width, height);
zoom.save(dstFile, formatName);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
private static ImageUtils fromImageFile(File file) throws IOException {
ImageUtils utils = new ImageUtils();
utils.load(file);
return utils;
}
/**
* 加载图片
* @param fileName
* @return
* @throws IOException
*/
public static ImageUtils load(String fileName) throws IOException {
File file = new File(fileName);
return fromImageFile(file);
}
// public static void main(String[] args) {
// String p = "e:/090613221071ed5df7cf2bce72.jpg";
// ImageUtils image , image2;
// try {
// image = ImageUtils.load(p);
// //image.zoomImage(p, "e:/xxx.jpg", 500, 500, "jpg");
// image.zoomTo(500, 500);
// image.cutTo(50,50,100, 100);
// image.save("e:/111.jpg", "jpg");
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
}
分享到:
相关推荐
图片剪切通常涉及到矩形选择和比例控制。`BitmapCup`可能提供了一个`cropBitmap()`方法,允许用户在预览图上划定一个矩形区域,然后根据这个矩形进行剪切。此功能在实现类似微信头像裁剪的功能时十分实用。 至于...
本主题将详细探讨一个名为“剪切图片的工具类”的功能,它主要用于对图片进行剪切和缩放操作。这类工具类在编程中通常会提供一系列方法,帮助开发者实现对图像的精确操作。 首先,我们需要理解“剪切”图片的概念。...
工具类,剪切图片,对图片的切割,以及其他的小工具。
【标题】:“桌面剪切工具 图形剪切工具”指的是用于在个人计算机桌面上进行图形截取和编辑的软件工具。这类工具通常提供方便快捷的方式来捕捉屏幕上的任何区域,然后可以进行裁剪、标注、保存或分享。它们是提高...
这个一个关于图片的工具类
【标题】:“js+java图片剪切工具” 这个标题揭示了我们讨论的核心——一个结合了JavaScript和Java技术的图片剪切工具。JavaScript通常用于前端网页交互,而Java则多用于后端服务处理。这种工具可能提供了用户在...
在Android应用开发中,图片剪切工具是一种常见的功能,它允许用户按照特定需求裁剪图片,以适应不同的应用场景,如头像设置、照片编辑等。Android-Crop-master是一个开源项目,专门为Android平台提供了图片裁剪的...
总结来说,"图片剪切类"是一个集成了图像加载、裁剪、保存等功能的代码模块,它简化了图片剪切的操作流程,提供了友好的用户界面,并可能进行了性能优化,是开发中处理图片剪切需求的有力工具。
在Android平台上,图片剪切是一项常见的功能,常用于用户头像设置、照片编辑等场景。本文将详细探讨如何实现Android图片剪切的功能,包括基本...通过学习和实践,你可以创建出功能完备且用户体验良好的图片剪切工具。
在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中实现一个自定义的图片剪切器,特别关注头像剪切的功能。这个话题基于一位CSDN博主的文章,他在博客中分享了详细的实现过程,并且提供了源码...
`Android图片处理工具类`是开发者必备的利器,能够帮助我们有效地管理图片资源,提高应用性能。以下是一些关于这个主题的关键知识点: 1. **图片查看**: - `ImageView`:Android自带的用于显示图片的基础组件,...
在日常操作中,我们经常需要复制、剪切各种文本、图片或者文件,传统的剪贴板只能存储一项内容,而剪切板工具则可以扩展这个功能,保存多条历史记录,方便用户随时回溯和使用。 剪切板工具的核心功能包括: 1. **...
在Asp.Net中实现图片剪切是一项常见的需求,特别是在网页应用中处理用户上传的图片时。本项目利用了jQuery库中的Jcrop插件,它是一个强大的JavaScript图片裁剪工具,可以很好地兼容各种主流浏览器,包括IE、Firefox...
虽然这里提到的压缩包子文件名为“图像编辑器”,但这个名称可能是个误解,因为视频剪切工具主要处理的是动态影像,而非静态图片。不过,一些高级的视频剪切工具也可能会包含一些基本的图像编辑功能,如添加滤镜、...
Android SDK并没有内置图片剪切工具,通常需要借助第三方库或自定义实现。 1. **选择图片**:可以使用Intent.ACTION_PICK或Intent.ACTION_GET_CONTENT启动系统图库,让用户选择一张图片。 2. **使用第三方库**:像...
通过以上这些步骤,我们可以在Java环境中实现一个基本的图片剪切工具,模拟QQ图片剪切的效果。这个过程中涉及的不仅是编程技术,还有对用户需求的理解和良好的界面设计原则。在实际开发中,可能还需要考虑性能优化、...
总的来说,"android-cropimage-master"是一个强大且易用的Android图片剪切工具,适用于各种Android设备和场景。开发者可以借此快速提升应用的用户体验,提供便捷的图片编辑功能。通过学习和使用这个库,你不仅可以...
15:ImageCut 图片剪切 16:ImageUtils 17:JsonTool 18:JsonTools json与对象转化的工具类 19:JsonVo 20:MathsTool 取一个int十进制数二进制下的第p位 21:ObjectCopyTool 22:PageVo 分页器 23:PropertyUtils...