java图片处理

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

public class Test {
	public static void main(String[] args) throws IOException {
		Test thumbnailatorTest = new Test();
//		thumbnailatorTest.test1();
//		thumbnailatorTest.test2();
//		thumbnailatorTest.test3();
//		thumbnailatorTest.test4();
//		thumbnailatorTest.test5();
//		thumbnailatorTest.test6();
		thumbnailatorTest.test7();
//		thumbnailatorTest.test8();
//		thumbnailatorTest.test9();
	}

	/**
	 * 指定大小进行缩放
	 *
	 * @throws IOException
	 */
	private void test1() throws IOException {
		/*
		 * size(width,height) 若图片横比200小,高比300小,不变
		 * 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变
		 * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300
		 */
		Thumbnails.of("E:\\图片\\15.jpg").size(200, 300).toFile(
				"E:\\图片\\image_200x300.jpg");
		Thumbnails.of("E:\\图片\\15.jpg").size(2560, 2048).toFile(
				"E:\\图片\\image_2560x2048.jpg");
	}

	/**
	 * 按照比例进行缩放
	 *
	 * @throws IOException
	 */
	private void test2() throws IOException {
		/**
		 * scale(比例)
		 */
		Thumbnails.of("E:\\图片\\15.jpg").scale(0.25f)
				.toFile("E:\\图片\\image_25%.jpg");
		Thumbnails.of("E:\\图片\\15.jpg").scale(1.10f).toFile(
				"E:\\图片\\image_110%.jpg");
	}

	/**
	 * 不按照比例,指定大小进行缩放
	 *
	 * @throws IOException
	 */
	private void test3() throws IOException {
		/**
		 * keepAspectRatio(false) 默认是按照比例缩放的
		 */
		Thumbnails.of("E:\\图片\\15.jpg").size(120, 120).keepAspectRatio(false)
				.toFile("E:\\图片\\image_120x120.jpg");
	}

	/**
	 * 旋转
	 *
	 * @throws IOException
	 */
	private void test4() throws IOException {
		/**
		 * rotate(角度),正数:顺时针 负数:逆时针
		 */
		Thumbnails.of("E:\\图片\\15.jpg").size(1280, 1024).rotate(90).toFile(
				"E:\\图片\\image+90.jpg");
		Thumbnails.of("E:\\图片\\15.jpg").size(1280, 1024).rotate(-90).toFile(
				"E:\\图片\\iamge-90.jpg");
	}

	/**
	 * 水印
	 *
	 * @throws IOException
	 */
	private void test5() throws IOException {
		/**
		 * watermark(位置,水印图,透明度)
		 */
		Thumbnails.of("E:\\图片\\images/15.jpg").size(1280, 1024).watermark(
				Positions.BOTTOM_RIGHT,
				ImageIO.read(new File("E:\\图片\\watermark.png")), 0.5f)
				.outputQuality(0.8f).toFile(
						"E:\\图片\\image_watermark_bottom_right.jpg");
		Thumbnails.of("E:\\图片\\15.jpg").size(1280, 1024).watermark(
				Positions.CENTER,
				ImageIO.read(new File("E:\\图片\\watermark.png")), 0.5f)
				.outputQuality(0.8f).toFile("E:\\图片\\image_watermark_center.jpg");
	}

	/**
	 * 裁剪
	 *
	 * @throws IOException
	 */
	private void test6() throws IOException {
		/**
		 * 图片中心400*400的区域
		 */
		Thumbnails.of("E:\\图片\\15.jpg").sourceRegion(Positions.CENTER, 400,
				400).size(200, 200).keepAspectRatio(false).toFile(
				"E:\\图片\\image_region_center.jpg");
		/**
		 * 图片右下400*400的区域
		 */
		Thumbnails.of("E:\\图片\\15.jpg").sourceRegion(Positions.BOTTOM_RIGHT,
				400, 400).size(200, 200).keepAspectRatio(false).toFile(
				"E:\\图片\\image_region_bootom_right.jpg");
		/**
		 * 指定坐标
		 */
		Thumbnails.of("E:\\图片\\15.jpg").sourceRegion(600, 500, 400, 400).size(
				200, 200).keepAspectRatio(false).toFile(
				"E:\\图片\\image_region_coord.jpg");
	}

	/**
	 * 转化图像格式
	 *
	 * @throws IOException
	 */
	private void test7() throws IOException {
		/**
		 * outputFormat(图像格式)
		 */
		Thumbnails.of("E:\\图片\\15.jpg").size(1280, 1024).outputFormat("png")
				.toFile("E:\\图片\\image_1280x1024.png");
		Thumbnails.of("E:\\图片\\15.jpg").size(1280, 1024).outputFormat("gif")
				.toFile("E:\\图片\\image_1280x1024.gif");
	}

	/**
	 * 输出到OutputStream
	 *
	 * @throws IOException
	 */
	private void test8() throws IOException {
		/**
		 * toOutputStream(流对象)
		 */
		OutputStream os = new FileOutputStream(
				"E:\\图片\\image_1280x1024_OutputStream.png");
		Thumbnails.of("E:\\图片\\15.jpg").size(1280, 1024).toOutputStream(os);
	}

	/**
	 * 输出到BufferedImage
	 *
	 * @throws IOException
	 */
	private void test9() throws IOException {
		/**
		 * asBufferedImage() 返回BufferedImage
		 */
		BufferedImage thumbnail = Thumbnails.of("E:\\图片\\15.jpg").size(1280,
				1024).asBufferedImage();
		ImageIO.write(thumbnail, "jpg", new File(
				"E:\\图片\\image_1280x1024_BufferedImage.jpg"));
	}

}

需要jar包:thumbnailator-0.4.2-all.jar

时间: 2024-08-07 03:37:27

java图片处理的相关文章

java 图片压缩变色问题

java图片压缩,有时由于图片自身的原因,如透明的PNG图.改alpha通道或四色图等. 压缩完了,会出现图片变色的情况. 如: 原图 压缩完: 尝试了很多方法,如JDK原生的方式及第三方组件java-image-scaling或thumbnailator都不解决问题. 后来采用阿里的SimpleImage解决.记录一下 SimpleImage github地址:https://github.com/alibaba/simpleimage依赖jar:commons-io-2.4.jarcommo

java图片上传(mvc)

最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.idea开发. 一.图片上传还是使用的这款jq插件.前端部署这款插件,不用说了吧.效果图       二.前台代码只需要盖一个位置.因为是比较好用的插件.插件样式自行修改. 三.后台代码. 后面看不见的. 这个图片上传主要是自己写了几个函数.让图片储存更加方便.分成了年月日储存.但是后期遍历比较困难,

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生产力;提供更广阔的部署选择.Neo4j 3.0 被认为是世界上最具伸缩性的基于Java的图片数据库. Neo4j 3.0.0 主要的新特性: Neo4j 3.0 新特性架构图 全新设计了内部架构移除了所有节点数量限制,数据库关系和属性都可以被存储和索引提供官方支持语言驱动器 (Java.JavaSc

java 图片裁剪上传变红等失真现象、cmyk颜色模式图片裁剪异常现象处理

1.本文仅为了提供图片上传过程中,部分java图片处理代码. 2.以下代码可以解决部分图片上传裁剪后整体变红等失真现象. 3.以下代码支持cmyk颜色模式的图片上传裁剪. /**  * 图片裁剪  * @param srcImageFile 裁剪前图片地址  * @param dirImageFile 裁剪后图片地址  * @param x   图片裁剪属性  * @param y   图片裁剪属性  * @param destWidth  图片裁剪属性  * @param destHeight

Java 图片读取与存储

1 @Override 2 public Image myWrite(Image image, String filePath) throws IOException { 3 if (image == null) { 4 throw new IOException("Image is null!"); 5 } 6 7 // create a file 8 File imgFile = new File(filePath + ".bmp"); 9 BufferedIm

java图片验证码包括文字和图片的旋转

java图片验证码包括文字图片的旋转: 此例子演示的是两位数的加减运算,需要的可以通过自己的修改获得更多的方式: 或者我上传的资源中也有其他的两种方式供选择:http://download.csdn.net/detail/huitoukest/8043711 package com.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; im

java 图片缩放

使用java自带的图片处理api,也可以使用(GraphicsMagick + im4j) import java.awt.Image; import java.awt.image.BufferedImage; Image img = ImageIO.read(file.getInputStream());//读入图片 BufferedImage tag = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); /

js 利用iframe和location.hash跨域解决办法,java图片上传回调JS函数跨域

奶奶的:折腾了我二天,终于解决了!网上有很多例子. 但跟我的都不太一样,费话不多说了,上图   上代码: IE ,firefix,chrome 测试通过 js :这个主页面,部分代码, function submitUpload(id){ $("#imgSrc" + id +"").attr("alt", "图片上传中--"); var imgID = id; if(id>0){ imgID = 1; } var for

java图片裁剪处理工具类代码

剪切前:  原文:java图片裁剪处理工具类代码 源代码下载地址:http://www.zuidaima.com/share/1550463351786496.htm 剪切后:  package com.zuidaima.zhangjun.image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import

simpleImageTool又纯java图片水印、缩放工具

simpleImageTool又一个简单.好用的图片格式转换.缩放水印叠加等功能的纯Java图片工具库. simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠加等,需要一个纯java的处理库,在网上找一下没有符合我的库,要么是太老很多还是jdk1.6以前的,要么是功能不够好.找到阿里的simpleimage功能还算完善,1.7环境下想使用很麻烦,还要搞JAI的包,在改simpleimage(JPG图片处理相关的用新的ImageIO方式处理已经改好)时发现