`
312350968
  • 浏览: 211839 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

图片剪切工具类

阅读更多

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();
//		}
//	}

}
 
分享到:
评论

相关推荐

    android 图片剪切工具类

    图片剪切通常涉及到矩形选择和比例控制。`BitmapCup`可能提供了一个`cropBitmap()`方法,允许用户在预览图上划定一个矩形区域,然后根据这个矩形进行剪切。此功能在实现类似微信头像裁剪的功能时十分实用。 至于...

    剪切图片的工具类

    本主题将详细探讨一个名为“剪切图片的工具类”的功能,它主要用于对图片进行剪切和缩放操作。这类工具类在编程中通常会提供一系列方法,帮助开发者实现对图像的精确操作。 首先,我们需要理解“剪切”图片的概念。...

    工具类,剪切图片

    工具类,剪切图片,对图片的切割,以及其他的小工具。

    桌面剪切工具 图形剪切工具

    【标题】:“桌面剪切工具 图形剪切工具”指的是用于在个人计算机桌面上进行图形截取和编辑的软件工具。这类工具通常提供方便快捷的方式来捕捉屏幕上的任何区域,然后可以进行裁剪、标注、保存或分享。它们是提高...

    Android图片的工具类,裁剪

    这个一个关于图片的工具类

    js+java图片剪切工具

    【标题】:“js+java图片剪切工具” 这个标题揭示了我们讨论的核心——一个结合了JavaScript和Java技术的图片剪切工具。JavaScript通常用于前端网页交互,而Java则多用于后端服务处理。这种工具可能提供了用户在...

    android的插件:图片剪切工具

    在Android应用开发中,图片剪切工具是一种常见的功能,它允许用户按照特定需求裁剪图片,以适应不同的应用场景,如头像设置、照片编辑等。Android-Crop-master是一个开源项目,专门为Android平台提供了图片裁剪的...

    图片剪切类

    总结来说,"图片剪切类"是一个集成了图像加载、裁剪、保存等功能的代码模块,它简化了图片剪切的操作流程,提供了友好的用户界面,并可能进行了性能优化,是开发中处理图片剪切需求的有力工具。

    Android 图片剪切

    在Android平台上,图片剪切是一项常见的功能,常用于用户头像设置、照片编辑等场景。本文将详细探讨如何实现Android图片剪切的功能,包括基本...通过学习和实践,你可以创建出功能完备且用户体验良好的图片剪切工具。

    WPF 自定义图片剪切器 - 头像剪切

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中实现一个自定义的图片剪切器,特别关注头像剪切的功能。这个话题基于一位CSDN博主的文章,他在博客中分享了详细的实现过程,并且提供了源码...

    Android图片处理工具类,包括: 图片查看、照片墙、bitmap转存、圆角、剪切、图片加载缓存、图片压缩等

    `Android图片处理工具类`是开发者必备的利器,能够帮助我们有效地管理图片资源,提高应用性能。以下是一些关于这个主题的关键知识点: 1. **图片查看**: - `ImageView`:Android自带的用于显示图片的基础组件,...

    剪切板工具

    在日常操作中,我们经常需要复制、剪切各种文本、图片或者文件,传统的剪贴板只能存储一项内容,而剪切板工具则可以扩展这个功能,保存多条历史记录,方便用户随时回溯和使用。 剪切板工具的核心功能包括: 1. **...

    Asp.Net剪切图片

    在Asp.Net中实现图片剪切是一项常见的需求,特别是在网页应用中处理用户上传的图片时。本项目利用了jQuery库中的Jcrop插件,它是一个强大的JavaScript图片裁剪工具,可以很好地兼容各种主流浏览器,包括IE、Firefox...

    视频剪切工具

    虽然这里提到的压缩包子文件名为“图像编辑器”,但这个名称可能是个误解,因为视频剪切工具主要处理的是动态影像,而非静态图片。不过,一些高级的视频剪切工具也可能会包含一些基本的图像编辑功能,如添加滤镜、...

    android相机拍照,图片剪切

    Android SDK并没有内置图片剪切工具,通常需要借助第三方库或自定义实现。 1. **选择图片**:可以使用Intent.ACTION_PICK或Intent.ACTION_GET_CONTENT启动系统图库,让用户选择一张图片。 2. **使用第三方库**:像...

    java图片剪切

    通过以上这些步骤,我们可以在Java环境中实现一个基本的图片剪切工具,模拟QQ图片剪切的效果。这个过程中涉及的不仅是编程技术,还有对用户需求的理解和良好的界面设计原则。在实际开发中,可能还需要考虑性能优化、...

    android剪切图片代码

    总的来说,"android-cropimage-master"是一个强大且易用的Android图片剪切工具,适用于各种Android设备和场景。开发者可以借此快速提升应用的用户体验,提供便捷的图片编辑功能。通过学习和使用这个库,你不仅可以...

    JAVA java工具类大全

    15:ImageCut 图片剪切 16:ImageUtils 17:JsonTool 18:JsonTools json与对象转化的工具类 19:JsonVo 20:MathsTool 取一个int十进制数二进制下的第p位 21:ObjectCopyTool 22:PageVo 分页器 23:PropertyUtils...

Global site tag (gtag.js) - Google Analytics