`
Colin_Davis
  • 浏览: 25117 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 图片裁切及放大缩小

    博客分类:
  • Java
阅读更多

   Java 图片裁切及放大缩小, 仅供参考, 要学会举一反三, 其它问题欢迎交流...

 

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * @author Colin Davis ( nilocsivad@hotmail.com )
 *
 */
public final class DealImage {
	
	private File folder;
	public static final String[] ACCEPT_IMG_TYPES = { ".png", ".jpg", ".jpeg" };

	public DealImage(String folder) {
		this.folder = new File(folder);
	}
	
	public void DealImages() throws IOException {
		for ( File file : this.folder.listFiles() ) {
			if ( file.isFile() && this.IsAcceptImage(file) ) {
				this.Write2File(this.Img2Square(file, 200), this.FileSuffix(file), file.getAbsolutePath(), "square");
			}
		}
	}
	
	public boolean IsAcceptImage(File file) {
		boolean accept = false;
		String fileName = file.getName();
		for ( String type : ACCEPT_IMG_TYPES ) {
			if ( fileName.endsWith(type) ) {
				accept = true;
				break;
			}
		}
		return accept;
	}

	public void Cut2Square(final File imgFile, final int sideLen) throws IOException {

		String formatName = FileSuffix(imgFile);

		Image img = this.Img2Square(imgFile, sideLen);

		BufferedImage bufImg = new BufferedImage(sideLen, sideLen, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2d = bufImg.createGraphics(); // ** 创建画板
		
		g2d.drawImage(img, 0, 0, sideLen, sideLen, null); // ** 把 img(图像) 画到指定位置(x:0, y:0)指定区域(x:sideLen + 0, y:sideLen + 0)
		g2d.dispose();
		
		String destFile = imgFile.getAbsolutePath() + ".square" + formatName;
		ImageIO.write(bufImg, formatName.substring(1), new File(destFile));
	}
	
	/**
	 * 缩小, 缩小比例为 图片大小(宽或高)/sideLen
	 */
	private BufferedImage Img2Small(File imgFile, final int sideLen) throws IOException {

		String formatName = FileSuffix(imgFile);
		if (formatName.toLowerCase().equals(".jpeg")) {
			imgFile = RenameJpeg2Jpg(imgFile);
			formatName = ".jpg";
		}

		BufferedImage img = ImageIO.read(imgFile);
		int imgWidth = img.getWidth(), imgHeight = img.getHeight(), newWidth = sideLen, newHeight = sideLen;
		if ( imgHeight > sideLen || imgWidth > sideLen ) {
			float scale = ( imgWidth > imgHeight ? imgWidth * 0.1f / sideLen : imgHeight * 0.1f / sideLen ) + 0.1f;
			newWidth = (int) (imgWidth * scale);
			newHeight = (int) (imgHeight * scale);
		}

		BufferedImage bi = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2d = bi.createGraphics();
		g2d.drawImage(img, 0, 0, newWidth, newHeight, null);
		g2d.dispose();
		
		return bi;
	}
	
	/**
	 * 缩小后到图片变成正方形, 用白色补齐空白区域
	 */
	private BufferedImage Img2Square(File imgFile, int sideLen) throws IOException {
		
		Image img = this.Img2Small(imgFile, sideLen);
		int imgWidth = img.getWidth(null), imgHeight = img.getHeight(null);
		
		sideLen = imgWidth > imgHeight ? imgWidth : imgHeight;

		BufferedImage bufImg = new BufferedImage(sideLen, sideLen, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2d = bufImg.createGraphics();
		
		g2d.setColor(Color.WHITE);
		g2d.fillRect(0, 0, sideLen, sideLen);
		
		int toX = ( sideLen - imgWidth ) / 2, toY = ( sideLen - imgHeight ) / 2;
		
		g2d.drawImage(img, toX, toY, imgWidth, imgHeight, null);
		g2d.dispose();
		
		return bufImg;
	}

	public File RenameJpeg2Jpg(File jpegFile) throws IOException {
		String imgName = jpegFile.getName();
		int idx = imgName.lastIndexOf(".");
		File destFile = new File(jpegFile.getParentFile(), imgName.substring(0, idx) + ".jpg");
		jpegFile.renameTo(destFile);
		return destFile;
	}

	public String FileSuffix(File file) {
		int idx = file.getName().lastIndexOf(".");
		return idx > 0 ? file.getName().substring(idx) : "";
	}
	
	public void Write2File(final BufferedImage img, String fmt, String path, String append) throws IOException {
		String outFile = path + "." + append + fmt;
		ImageIO.write(img, fmt.substring(1), new File(outFile));
	}
	
	public static void main(String[] args) throws IOException {
		DealImage si = new DealImage("/home/cpu/images/");
		si.DealImages();
	}
	
}

 

分享到:
评论

相关推荐

    java图片裁切

    以下是一些关于Java图片裁切的关键知识点: 1. **IO流处理**:首先,Java中的`java.io`包提供了对文件的读写操作。在上传图片时,我们需要使用输入流(InputStream)读取上传的文件,然后可能需要将图片保存到...

    利用Js进行图片 放大,缩小,裁切工具,后台采用注明的ImageMagik组件处理图片

    在本文中,我们将深入探讨如何使用JavaScript实现图片的放大、缩小和裁切功能,并结合ImageMagick组件在后台处理图片。这些技术对于前端开发者来说至关重要,因为它们允许用户交互式地编辑图片,同时通过后端服务...

    vue实现裁切图片同时实现放大、缩小、旋转功能

    本篇文章主要介绍了vue实现裁切图片同时实现放大、缩小、旋转功能,分享给大家,具体如下: 实现效果: 裁切指定区域内的图片 旋转图片 放大图片 输出bolb 格式数据 提供给 formData 对象 效果图 ...

    JSP上传图片并裁切及放大显示.rar

    JSP上传图片并裁切及放大显示,常用的JSP程序,看到有不少的图片上传、缩放及裁切程序,手痒就写了个,网上见的多的都是ASP/ASP.NET、php的,还没有发现有JSP的,写时候参数程序比较少,因此程序并不完善,只是实现...

    php图片裁切工具

    4. **裁切图片**:根据设定的参数,调用裁切函数,如imagecopyresampled()或Imagick::cropImage()。 5. **保存裁切结果**:裁剪后的新图需要保存为新的文件,使用imagejpeg()、imagepng()等函数写入文件。 6. **显示...

    利用Js进行图片 放大,缩小,裁切工具

    用ASP+ImageMagik组件制作的在线照片编辑工具程序利用Js进行图片 放大,缩小,裁切工具,后台采用注明ImageMagik组件处理图片。工具使用范围:方便制作论坛头像,在没有图片处'用ASP+ImageMagik组件制作的在线照片...

    图片裁切(.net,java,php)

    二、Java 图片裁切 在Java中,我们可以利用java.awt和javax.imageio包中的类来处理图片。Image类是Java处理图像的基础,而BufferedImage提供了更丰富的操作接口。裁切图片时,可以通过定义Image的子类Rectangle2D来...

    jsp图片裁切源码(仿开心网)

    9. **ZoomImageDemo**:这可能是项目中的一个核心类或者页面,用于实现图片的放大、缩小和裁剪操作。它可能包含了展示图片、获取用户裁剪选择、执行裁剪操作等功能。 综上所述,"jsp图片裁切源码(仿开心网)"涉及...

    Vue3+TS图片裁切组件

    Vue3+TS图片裁切组件,在main.ts中全局引入 import ImageCrop from "@/components/image-crop/" const app = createApp(App) app.use(ImageCrop); app.mount('#app ') 在对应的页面使用 裁切比例,不用此参数自由...

    jquery图片裁切+PHP文件上传

    在图片裁切场景中,我们通常会使用jQuery的插件,如JQuery Cropper。这个插件允许用户在网页上自由选择图片的裁剪区域,提供了拖动、缩放、旋转等多种操作,用户可以调整裁剪框的大小和位置,以达到理想的效果。...

    MFC 鼠标选定显示范围,图片放大缩小,带左右滚动条显示

    本项目“MFC 鼠标选定显示范围,图片放大缩小,带左右滚动条显示”就是这样一个示例,它实现了用户通过鼠标选择图像的特定区域,然后该区域会被放大显示,并且提供了左右滚动条以便浏览放大后的图像。 1. **MFC框架...

    图像裁切及上传(JSP+JQuery+CropZoom+JAVA)

    【图像裁切及上传技术详解】 在网页应用中,图像处理是一项不可或缺的功能,特别是涉及到用户上传个人头像、商品图片等场景时。本项目基于JSP、JQuery、CropZoom以及JAVA技术,提供了一套完整的图片上传和裁切解决...

    图片裁切、拖放、缩放的JavaScript特效

    在网页开发中,图片处理是不可或缺的一部分,尤其是随着用户体验需求的提升,图片的裁切、拖放和缩放功能越来越受到重视。JavaScript作为客户端脚本语言,为实现这些特效提供了强大的支持。本文将深入探讨如何利用...

    JAVA快速图片剪切

    在Java编程语言中,图片剪切是一项常见的任务,特别是在图像处理和图形用户界面的应用中。本文将深入探讨如何使用Java实现快速的图片剪切功能,以及相关的核心知识点。 首先,我们要明白图片剪切的基本概念。图片...

    图片自由裁切

    在数字媒体领域,图片自由裁切是一项常见的图像处理任务,它允许用户根据需求调整图片的尺寸、比例或焦点,以适应不同的应用场景。本教程将深入探讨图片自由裁切的原理、工具以及实际操作技巧。 一、图片裁切的必要...

    HTML5图片放大 图片裁切 动画虚线框示例.rar

    HTML5图片放大 图片裁切 动画虚线框示例,测试需要在服务器环境下进行,不能直接双击打开HTML。如演示效果所示,图片是经过放大后,再进行裁切的,本地客户端环境,需要IE9、火狐、chrome等浏览器。

    ajax+js+asp+aspjpeg 实现剪切图片、拖拽图片、缩放图片、裁切图片

    ajax+js+asp+aspjpeg实现剪切图片、拖拽图片、缩放图片、裁切图片 主要功能: 加载服务器上的图片,用户可以自定义图片的大小,拖拽,缩放,裁切,预览等效果! 可以作为自定义头像功能使用! 备注:在这里我要向...

    图片在线裁切工具ZoomImageDemo

    《图片在线裁切工具ZoomImageDemo详解》 在数字化时代,图片处理技术变得越来越重要,尤其是在网络应用中,用户往往需要对图片进行裁剪、调整大小等操作以满足不同的需求。今天我们将深入探讨一个名为...

    图片上传裁切功能

    在IT领域,图片上传裁切功能是Web应用和移动应用中常见的用户交互元素,它允许用户在上传图片之前或之后进行自由裁剪,以确保图片符合特定尺寸或比例要求。这个功能广泛应用于社交媒体、电子商务、内容编辑平台等...

Global site tag (gtag.js) - Google Analytics