package net.shopxx.util;
import java.awt.AlphaComposite;
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 java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import net.shopxx.bean.SystemConfig.WatermarkPosition;
/**
* 工具类 - 图片处理
* ============================================================================
* 版权所有 2008-2010 长沙鼎诚软件有限公司,并保留所有权利。
* ----------------------------------------------------------------------------
* 提示:在未取得SHOP++商业授权之前,您不能将本软件应用于商业用途,否则SHOP++将保留追究的权力。
* ----------------------------------------------------------------------------
* 官方网站:http://www.shopxx.net
* ----------------------------------------------------------------------------
* KEY: SHOPXX5DA8E8F8C18FAC121CA036F5BF31C086
* ============================================================================
*/
public class ImageUtil {
/**
* 图片缩放(图片等比例缩放为指定大小,空白部分以白色填充)
*
* @param srcBufferedImage
* 源图片
* @param destFile
* 缩放后的图片文件
*/
public static void zoom(BufferedImage srcBufferedImage, File destFile, int destHeight, int destWidth) {
try {
int imgWidth = destWidth;
int imgHeight = destHeight;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
if (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
} else {
imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
}
BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = destBufferedImage.createGraphics();
graphics2D.setBackground(Color.WHITE);
graphics2D.clearRect(0, 0, destWidth, destHeight);
graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
graphics2D.dispose();
ImageIO.write(destBufferedImage, "JPEG", destFile);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 添加图片水印
*
* @param srcBufferedImage
* 需要处理的源图片
* @param destFile
* 处理后的图片文件
* @param watermarkFile
* 水印图片文件
*
*/
public static void imageWatermark(BufferedImage srcBufferedImage, File destFile, File watermarkFile, WatermarkPosition watermarkPosition, int alpha) {
try {
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
BufferedImage destBufferedImage = new BufferedImage(srcWidth, srcHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = destBufferedImage.createGraphics();
graphics2D.setBackground(Color.WHITE);
graphics2D.clearRect(0, 0, srcWidth, srcHeight);
graphics2D.drawImage(srcBufferedImage.getScaledInstance(srcWidth, srcHeight, Image.SCALE_SMOOTH), 0, 0, null);
if (watermarkFile != null && watermarkFile.exists() && watermarkPosition != null && watermarkPosition != WatermarkPosition.no) {
BufferedImage watermarkBufferedImage = ImageIO.read(watermarkFile);
int watermarkImageWidth = watermarkBufferedImage.getWidth();
int watermarkImageHeight = watermarkBufferedImage.getHeight();
graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha / 100.0F));
int x = 0;
int y = 0;
if (watermarkPosition == WatermarkPosition.topLeft) {
x = 0;
y = 0;
} else if (watermarkPosition == WatermarkPosition.topRight) {
x = srcWidth - watermarkImageWidth;
y = 0;
} else if (watermarkPosition == WatermarkPosition.center) {
x = (srcWidth - watermarkImageWidth) / 2;
y = (srcHeight - watermarkImageHeight) / 2;
} else if (watermarkPosition == WatermarkPosition.bottomLeft) {
x = 0;
y = srcHeight - watermarkImageHeight;
} else if (watermarkPosition == WatermarkPosition.bottomRight) {
x = srcWidth - watermarkImageWidth;
y = srcHeight - watermarkImageHeight;
}
graphics2D.drawImage(watermarkBufferedImage, x, y, watermarkImageWidth, watermarkImageHeight, null);
}
graphics2D.dispose();
ImageIO.write(destBufferedImage, "JPEG", destFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 图片缩放并添加图片水印(图片等比例缩放为指定大小,空白部分以白色填充)
*
* @param srcBufferedImage
* 需要处理的图片
* @param destFile
* 处理后的图片文件
* @param watermarkFile
* 水印图片文件
*
*/
public static void zoomAndWatermark(BufferedImage srcBufferedImage, File destFile, int destHeight, int destWidth, File watermarkFile, WatermarkPosition watermarkPosition, int alpha) {
try {
int imgWidth = destWidth;
int imgHeight = destHeight;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
if (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
} else {
imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
}
BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = destBufferedImage.createGraphics();
graphics2D.setBackground(Color.WHITE);
graphics2D.clearRect(0, 0, destWidth, destHeight);
graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
if (watermarkFile != null && watermarkFile.exists() && watermarkPosition != null && watermarkPosition != WatermarkPosition.no) {
BufferedImage watermarkBufferedImage = ImageIO.read(watermarkFile);
int watermarkImageWidth = watermarkBufferedImage.getWidth();
int watermarkImageHeight = watermarkBufferedImage.getHeight();
graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha / 100.0F));
int x = 0;
int y = 0;
if (watermarkPosition == WatermarkPosition.topLeft) {
x = 0;
y = 0;
} else if (watermarkPosition == WatermarkPosition.topRight) {
x = destWidth - watermarkImageWidth;
y = 0;
} else if (watermarkPosition == WatermarkPosition.center) {
x = (destWidth - watermarkImageWidth) / 2;
y = (destHeight - watermarkImageHeight) / 2;
} else if (watermarkPosition == WatermarkPosition.bottomLeft) {
x = 0;
y = destHeight - watermarkImageHeight;
} else if (watermarkPosition == WatermarkPosition.bottomRight) {
x = destWidth - watermarkImageWidth;
y = destHeight - watermarkImageHeight;
}
graphics2D.drawImage(watermarkBufferedImage, x, y, watermarkImageWidth, watermarkImageHeight, null);
}
graphics2D.dispose();
ImageIO.write(destBufferedImage, "JPEG", destFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取图片文件的类型.
*
* @param imageFile
* 图片文件对象.
* @return 图片文件类型
*/
public static String getImageFormatName(File imageFile) {
try {
ImageInputStream imageInputStream = ImageIO.createImageInputStream(imageFile);
Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream);
if (!iterator.hasNext()) {
return null;
}
ImageReader imageReader = (ImageReader) iterator.next();
imageInputStream.close();
return imageReader.getFormatName().toLowerCase();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
分享到:
相关推荐
java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...
Base64工具类-字符编码工具类-数据类型转换-日期工具类-Escape中文转码工具类-fastjson工具类-文件工具类-Http工具类-http请求工具类-用于模拟HTTP请求中GET/POST方式 -图片处理工具类-Ip工具类-mail工具类-Map工具...
- QrcodeUtils.java\防止SQL注入和XSS攻击Filter\获取文件绝对路径最后的文件夹名称\加密工具类 - CryptoUtils.java\日期工具类 - DateUtil.java\图片处理工具类 - ImageUtils.java\文件相关操作工具类——FileUtils...
而Base64工具类在处理二进制数据,如在网络上传输图片或证书时,是必不可少的。 除了这两个主要工具类,`javaUtils`文件夹中可能还包含其他类型的工具类,如日期时间工具、字符串处理工具、集合操作工具等。这些...
"图片处理工具类"就是为了解决这些问题而设计的,它集成了多种常用的图片操作功能,如图片压缩、格式转换和尺寸调整等。下面将详细阐述这些知识点。 1. **图片压缩**: 在Android中,图片压缩主要目的是减小图片的...
--------------------PDF处理工具类--------------------
java图片处理工具类JAR包 java-image-scalingjar
本文将详细讨论如何使用基于base64的图片处理工具类,以实现图片与base64字符串之间的转换。 首先,我们要理解什么是base64。Base64是一种用于将任意二进制数据编码为ASCII字符的编码方式,它主要应用于邮件系统、...
在Java编程语言中,处理图片是一项常见的任务,尤其在网页开发、移动应用或者图形用户界面设计中。本篇文章将深入探讨如何使用Java...通过深入理解这些技术,我们可以创建出强大的图片处理工具类,满足日常开发需求。
本压缩包"安卓开发框架工具类相关-常用开发工具类文件复制日志打印图片处理toast.rar"包含了几个关键领域的工具类:文件操作、日志记录、图片处理和Toast提示。以下将详细讲解这些知识点。 1. 文件操作: 在安卓中...
7. **图片处理工具类**: - 图片压缩:优化图片大小,减少内存占用。 - 图片裁剪和旋转:用于用户选择照片后进行调整。 8. **设备和系统信息工具类**: - 获取设备信息:如屏幕分辨率、设备型号等。 - 系统版本...
图片处理工具类,能缩放图片,给图片打水印等。
java工具类(包括bean操作工具类、浏览器读取工具累、汉字转拼音工具类、图片处理工具类、ip工具类、随机码工具类、json)
这一功能非常适合需要大量处理社交媒体图片的用户。 在照片的细节处理方面,软件同样表现出色。红眼消除、瑕疵修复和斑点去除等高级功能,可以让用户轻松地移除照片中不需要的细节,比如拍摄时由于光线反射而产生的...
图片加载工具类如Glide或Picasso可以帮助我们轻松管理图片资源;还有可能是Log工具类,用于方便地记录日志,帮助调试;或者权限管理工具类,处理Android运行时权限问题等。 在深入学习和使用这些工具类时,开发者应...
图片的处理工具类 ,大图上面图标添加,自动设置图标位置,
综上所述,"图片下载工具类"涉及了Android开发中的网络请求、多线程、内存管理、文件操作、图片处理等多个核心领域,是一个功能完备且高效的组件,对于任何需要展示网络图片的应用都是不可或缺的。
图片处理sdk(just for eclipse) Note: 新的项目(for studio)转移到https://github.com/jarlen/PhotoEdit (包括jni本地源码) cn.ffmpeg gif mp4 互转 com.js.photosdk.bodywarp 图片变形 com.js.photosdk.crop ...
"安卓开发框架工具类相关-可以拍照和选择图片的工具.rar" 提供的正是这样一种工具集,用于帮助开发者实现用户在应用内拍照或选择已有图片的功能。下面我们将详细探讨这两个核心知识点。 1. 安卓拍照功能: 在安卓...