`

图片高保真处理

 
阅读更多
package file;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;

public class ImageUtil {

	/**
	 * 左上方添加图片
	 * @param bgImagePath
	 * @param fgImagePath
	 * @param overlayImagePath
	 */
	public static String overlayLeftTop(String bgImagePath, String fgImagePath,
			String overlayImagePath) {
		return overlay(bgImagePath, fgImagePath, overlayImagePath, 0, 0);
	}
	/**
	 * 右上方添加图片
	 * @param bgImagePath
	 * @param fgImagePath
	 * @param overlayImagePath
	 */
	public static String overlayRightTop(String bgImagePath, String fgImagePath,
			String overlayImagePath) {
		return overlay(bgImagePath, fgImagePath, overlayImagePath, 1, 0);
	}
	/**
	 * 左下方添加图片
	 * @param bgImagePath
	 * @param fgImagePath
	 * @param overlayImagePath
	 */
	public static String overlayLeftButtom(String bgImagePath,
			String fgImagePath, String overlayImagePath) {
		return overlay(bgImagePath, fgImagePath, overlayImagePath, 0, 1);
	}
	/**
	 * 右下方添加图片
	 * @param bgImagePath
	 * @param fgImagePath
	 * @param overlayImagePath
	 */
	public static String overlayRightButtom(String bgImagePath,
			String fgImagePath, String overlayImagePath) {
		return overlay(bgImagePath, fgImagePath, overlayImagePath, 1, 1);
	}

	/**
	 * 合成图片 x:前置图片所在x轴位置 y:前置图片所在y轴位置
	 */
	public static String overlay(String bgImagePath, String fgImagePath,
			String overlayImagePath, int x, int y) {
		if (!strIsValid(bgImagePath) || !strIsValid(fgImagePath)
				|| !strIsValid(overlayImagePath)) {
			throw new IllegalArgumentException();
		}
		BufferedImage bgImage = readImage(bgImagePath);
		BufferedImage fgImage = readImage(fgImagePath);
		// 合成图片
		BufferedImage overlayedImage = overlayImages(bgImage, fgImage, x, y);

		/** 输出图片 */
		if (overlayedImage != null) {
			File file = new File(overlayImagePath);
			if (file.exists())
				file.delete();
			writeImage(overlayedImage, overlayImagePath, "PNG");
		}
		return overlayImagePath;
	}

	/**
	 * 合成图片
	 * 
	 * @param bgImage
	 * @param fgImage
	 * @return
	 */
	public static BufferedImage overlayImages(BufferedImage bgImage,
			BufferedImage fgImage, int x, int y) {
		if (fgImage.getHeight() > bgImage.getHeight()
				|| fgImage.getWidth() > fgImage.getWidth()) {
			return null;
		}

		Graphics2D g = bgImage.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		g.drawImage(bgImage, 0, 0, null);

		g.drawImage(fgImage, x, y, null);

		g.dispose();
		return bgImage;
	}

	/**
	 * 读取图片
	 * 
	 * @param fileLocation
	 * @return
	 */
	public static BufferedImage readImage(String fileLocation) {
		BufferedImage img = null;
		try {
			img = ImageIO.read(new File(fileLocation));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return img;
	}

	/**
	 * 输出图片
	 * 
	 * @param img
	 * @param fileLocation
	 * @param extension
	 */
	public static void writeImage(BufferedImage img, String fileLocation,
			String extension) {
		try {
			BufferedImage bi = img;
			File outputfile = new File(fileLocation);
			ImageIO.write(bi, extension, outputfile);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 检查图片的高度和宽度
	 * 
	 * @param imagePath
	 * @param height
	 * @param width
	 * @return
	 */
	public static boolean checkImageHW(String imagePath, int height, int width) {
		if (StrUtil.isNullOrEmpty(imagePath))
			return false;
		try {
			BufferedImage image = ImageIO.read(new File(imagePath));
			int w = image.getWidth();
			int h = image.getHeight();
			return w == width && h == height;
		} catch (IOException e) {
			return false;
		}
	}

	/**
	 * 图片等比例缩小
	 * 
	 * @param fromFileStr
	 *            : 原图片路径
	 * @param saveToFileStr
	 *            : 缩小后图片的路径
	 * @param width
	 *            : 图片缩小后的高度
	 * @param height
	 *            : 图片缩小后的宽度
	 * @throws Exception
	 */
	public static void shrinkImage(String fromFileStr, String saveToFileStr,
			int width, int height)  {
		if (!strIsValid(fromFileStr) || !strIsValid(fromFileStr)) {
			throw new IllegalArgumentException("image path is null");
		}
		try {
			Thumbnails.of(fromFileStr).size(width,height).toFile(saveToFileStr);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 图片缩小
	 * @param source
	 * @param targetW
	 * @param targetH
	 * @param equalProportion 是否等比缩小
	 * @return
	 */
	public static BufferedImage resize(BufferedImage source, int targetW,
			int targetH, boolean equalProportion) {
		int type = source.getType();
		BufferedImage target = null;
		double sx = (double) targetW / source.getWidth();
		double sy = (double) targetH / source.getHeight();
		if (equalProportion) {
			if (sx > sy) {
				sx = sy;
				targetW = (int) (sx * source.getWidth());
			} else {
				sy = sx;
				targetH = (int) (sx * source.getHeight());
			}
		}
		if (type == BufferedImage.TYPE_CUSTOM) {
			ColorModel cm = source.getColorModel();
			WritableRaster raster = cm.createCompatibleWritableRaster(targetW,
					targetH);
			boolean alphaPremultiplied = cm.isAlphaPremultiplied();
			target = new BufferedImage(cm, raster, alphaPremultiplied, null);
		} else {
			target = new BufferedImage(targetW, targetH, type);
			Graphics2D g = target.createGraphics();
			g.setRenderingHint(RenderingHints.KEY_RENDERING,
					RenderingHints.VALUE_RENDER_QUALITY);
			g.drawRenderedImage(source,
					AffineTransform.getScaleInstance(sx, sy));
			g.dispose();
		}
		return target;
	}

	public static boolean strIsValid(String str) {
		return str != null && !str.trim().equals("");
	}
}

 

分享到:
评论

相关推荐

    Photomatix Pro for mac 5.0.3强大数字图片合成工具 高质保真处理 破解版

    Photomatix用来处理同一场景下不同曝光设置的照片。这些照片称为包围曝光照片,许多型号的相机都有自动包围曝光功能。 但并非一定需要多张照片才能使用Photomatix。色调映射工具(Tone Mapping tool)也能用于48位...

    gimp中文版下载 | GIMP(专业图像处理软件)官方中文版V2.10.30 | GIMP图片编辑器中文版下载

    gimp是什么软件:gimp中文版是一款完全免费且开源的跨平台专业图像处理软件,提供一流的色彩管理功能,以确保在数字和印刷媒体上实现高保真色彩再现,gimp中文版支持多种图像处理工具、全通道、多级撤销操作恢复旧貌...

    图片格式批量换理狗 Image Batch Dog

    软件名称: 图片格式批量换理狗 Image Batch Dog ... 软件采用高级优秀算法,在对原有图片数据最大程度保真的同时,具有特别快速的处理速度; 软件体积小巧,是一款绿色软件,免安装; 操作简单:

    PictureManager

    office图片处理工具,处理后的图片高度保真,使用方便!

    万能图片格式转换已修改免费

    软件采用高级优秀算法,在对原有图片数据最大程度保真的同时,具有特别快速的处理速度; 软件体积小巧,是一款绿色软件,免安装; 操作简单: 回车键,开始/暂停操作; ESC键 ,停止操作。

    iSee 3.9.3.0 中文版 一款功能全面的数字图像浏览处理工具.zip

    批量转换:方便转换大批量图片(支持子文件夹下所有图片)的格式,并自动高保真压缩大小; 批量添加相框:方便为大批量图片添加相同的相框/大头贴/毛边; 批量文字:由用户自定义格式化文字,加入到选择图片及文件夹...

    朵朵多媒体相册

    的图片导入、图片智能按比例处理(确保不变形,不损害象素,高保真,加动感模式、字幕、音乐、相框、模板处理,视频输出达到1920*1080超清晰视频,图片字幕、片头制作、文字相框得心应手。相框风格涉及流金岁月、...

    PDF Word Converter V2 一站式文档转换解决方案

    高保真转换:精确还原文档元素,包括文本、图片、表格和格式。 安全保障:本地转换过程,确保文档安全和隐私。 简单易用:直观的用户界面,轻松上手,无需复杂设置。 适用场景: 学术研究:轻松整理和编辑研究资料...

    图像压缩综述.docx

    图像和视频信号数字化可以避免远距离传输的累积失真,数字化存储可以高保真还原,并且容易借助计算机进行灵活处理和管理。而传输和存储图像需要占用大量的数据空间,这严重影响了传输速率和实时处理量,极大地制约了...

    在线社交网络上的可感知处理的隐私保护照片共享

    在这项工作中,我们解决了在Facebook上设计隐私保护,高保真,存储高效的照片共享解决方案的问题。 我们首先对Facebook对上传的图片执行的操作进行深入研究。 了解了这些信息后,我们建议采用一种DCT域图像加密方案...

    (matlab程序)使用 GPU 和代码加速杂波模拟.rar

    但是,生成高保真杂波返回涉及许多步骤,因此计算成本通常很高。例如,使用以下步骤模拟杂波 将整个地形划分为杂乱的小块。图块的大小取决于方位角图片跨度和范围分辨率。 对于每个补丁,计算其相应的参数,例如...

    OpenCV-Python-Tutorial::open_book: OpenCV-Python 初学者图像处理教程

    面向初学者的OpenCV-Python教程教程地址:本仓库为教程中所用到的源码、图片和音视频素材等目录入门篇标题简介了解和安装OpenCV-Python度量运行时间/提升效率的几种方式图片的载入/显示和保存高保真保存图片、...

    html2canvas 截图功能 报表和文档转换

    2. **高保真度**:尽可能准确地呈现 HTML 元素的样式和布局。 3. **跨浏览器支持**:在大多数主流浏览器上工作。 4. **可配置性**:允许自定义一些参数,如图像质量、尺寸等。 5. **元素选择**:可以选择要转换的...

    给照片添加装饰iShow_2.16绿色汉化版

    用户只需要通过拖拽、缩放和旋转等简单操作即可完成自我形象设计,设计完成作品轻松保存为相片,并且分级按多种倍数以及局部特写等方式保存,高画质高保真,给你完全真实的体验。在电脑配置允许的情况下可以输出无限...

    Flash360度全景展示

    4、图像高保真,无失真和变形:可以通过下面我们的演示页面,看出我们的全景图像的变形程度,绝无变形和扭曲。 5、提供源代码,是目前国内唯一提供源代码的360度全景展示系统,解除客户后顾之忧。 6、提供全景制作...

    Now-We-Flip-MS2-:“岩石,纸,剪刀”与“记忆”相遇-纸牌游戏

    原型(高保真) 解密 设计 名字 为什么“现在我们翻转” ? 描述 标识 描述 参考图片: Anaconda MAA最终徽标: 颜色 描述 版式 描述 图片 描述 特征 功能一 描述 未来实施的功能 在不久的将来绝对需要。描述 ...

    2024年河北省职业院校移动应用与开发(中职组)样题及赛项规程

    参赛选手依据给定的功能描述,使用Photoshop图像工具软件处理和设计图片,使用Adobe XD进行高保真原型设计,需符合移动应用UI设计规范,同时实现原型界面之间交互的功能。 2.模块B:移动应用前端开发 参赛选手按照...

    豪杰大眼睛 v2.5 Build 20060801

    采用“32位高保真内核技术”,图像色彩不失真,更加逼真。 输出图像清晰亮丽,层次分明。 4. 图像浏览,别具特色 提供对“鼠标浏览操作”的全方位支持,鼠标滚轮、鼠标右键,具有特殊功用。 提供对“键盘浏览...

    《计算机应用基础》教材目录.doc.doc

    高保真音乐的音质 3. 常见音乐格式 任务四 多媒体视频的使用 1. 电视视频的制式 2. 视频分辨率 3. 刷新率 4. 常见视频格式 ----------------------- 《计算机应用基础》教材目录全文共3页,当前为第1页。 《计算机...

    gerbolyze:将高分辨率位图图像渲染到PCB gerber文件

    Gerbolyze高保真SVG / PNG / JPG到PCB转换器Gerbolyze将SVG矢量和PNG / JPG光栅图像渲染到现有的Gerber PCB制造文件中。 无需中间光栅化/重新矢量化步骤,即可无损呈现SVG文件中的矢量数据。 尽管如此,gerbolyze...

Global site tag (gtag.js) - Google Analytics