java实现图片变色_java 图片裁剪上传变红等失真现象、cmyk颜色模式图片裁剪异常现象处理...
1、本文仅为了提供图片上传过程中,部分java图片处理代码。
2、以下代码可以解决部分图片上传裁剪后整体变红等失真现象。
3、以下代码支持cmyk颜色模式的图片上传裁剪。/**
* 图片裁剪
* @param srcImageFile 裁剪前图片地址
* @param dirImageFile 裁剪后图片地址
* @param x 图片裁剪属性
* @param y 图片裁剪属性
* @param destWidth 图片裁剪属性
* @param destHeight 图片裁剪属性
*/
public static void abscut(String srcImageFile,String dirImageFile,int x,int y,int destWidth,int destHeight) {
BufferedImage bi=null;
try {
ImageFilter cropFilter;
Image img = Toolkit.getDefaultToolkit().getImage(srcImageFile);//可讀取丟失ICC信息的圖片(裁剪后图片变红等现象的原因)
bi = toBufferedImage(img);
int srcWidth = bi.getWidth();
int srcHeight = bi.getHeight();
if (srcWidth >= destWidth && srcHeight >= destHeight) {
Image p_w_picpath = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(p_w_picpath.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ImageIO.write(tag, "jpg", new File(dirImageFile));
}
} catch (Exception e) {
System.out.println("ImageUtils图片裁剪异常:"+e.getLocalizedMessage());
}
}
/**
* Image 转 BufferedImage
* @param p_w_picpath
* @return
*/
public static BufferedImage toBufferedImage(Image p_w_picpath) {
if (p_w_picpath instanceof BufferedImage) {
return (BufferedImage)p_w_picpath;
}
// This code ensures that all the pixels in the p_w_picpath are loaded
p_w_picpath = new ImageIcon(p_w_picpath).getImage();
// Determine if the p_w_picpath has transparent pixels; for this method's
// implementation, see e661 Determining If an Image Has Transparent Pixels
//boolean hasAlpha = hasAlpha(p_w_picpath);
// Create a buffered p_w_picpath with a format that's compatible with the screen
BufferedImage bp_w_picpath = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
try {
// Determine the type of transparency of the new buffered p_w_picpath
int transparency = Transparency.OPAQUE;
/* if (hasAlpha) {
transparency = Transparency.BITMASK;
}*/
// Create the buffered p_w_picpath
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bp_w_picpath = gc.createCompatibleImage(
p_w_picpath.getWidth(null), p_w_picpath.getHeight(null), transparency);
} catch (HeadlessException e) {
// The system does not have a screen
}
if (bp_w_picpath == null) {
// Create a buffered p_w_picpath using the default color model
int type = BufferedImage.TYPE_INT_RGB;
//int type = BufferedImage.TYPE_3BYTE_BGR;//by wang
/*if (hasAlpha) {
type = BufferedImage.TYPE_INT_ARGB;
}*/
bp_w_picpath = new BufferedImage(p_w_picpath.getWidth(null), p_w_picpath.getHeight(null), type);
}
// Copy p_w_picpath to buffered p_w_picpath
Graphics g = bp_w_picpath.createGraphics();
// Paint the p_w_picpath onto the buffered p_w_picpath
g.drawImage(p_w_picpath, 0, 0, null);
g.dispose();
return bp_w_picpath;
}
java实现图片变色_java 图片裁剪上传变红等失真现象、cmyk颜色模式图片裁剪异常现象处理...相关推荐
- php生成cmyk图片,用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!...
各位好!我在php里用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!比如:在ImageMagick通过ImagickPixel设置的颜色为cmyk(0,0 ...
- java 批量上传图片插件_java多文件上传plupload控件实现多图片上传(一)
使用的是plupload-2.1.2 控件.网上资源挺多的,很好下载. plupload 官方地址 : http://www.plupload.com/ plupload 示例: http://www ...
- java中上传文件_Java中文件上传下载 --使用Minio
Minio模板类: @RequiredArgsConstructor public class MinioTemplate implements InitializingBean { private ...
- java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法
本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...
- java 字符终端库_Java 字符终端上获取输入三种的方式分享
在java 字符终端上获取输入有三种方式: 1.java.lang.system.in (目前jdk版本均支持) 2.java.util.scanner (jdk版本>=1.5) 3.java. ...
- 苹果cms图片采集到网站服务器上,解决苹果cms后台采集数据不显示图片的问题
大家都有遇到过吧,后台采集的数据图片地址全都多一条代码这样图片就不显示了 下面我就给大家一个解决方法.资源站又玩新花样了,大家第一组代码替换无效请用第二组代码替换 注意:V10和8操作代码是不一样的. ...
- java大文件 索引_JAVA 大文件上传解决方案(500M以上)
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- JAVA 实现FTP功能_Java实现FTP上传下载功能
public classFtp {private static final Logger logger = Logger.getLogger(FTP.class);/*** FTP客户端*/ priv ...
- java中检测鼠标_java – 在屏幕上检测鼠标移动
完全透明的框架不会接收鼠标事件. 这是使用MouseInfo的替代方法.这适用于应用程序的组件.是不可见的(透明的),未聚焦的或最小化的. import java.awt.*; import java ...
最新文章
- gin.context 怎么在其他包中获取 只能传递吗_跨进程传递大图,你能想到哪些方案呢?...
- 提高jQuery执行效率
- Java编程基础10——面向对象_多态抽象类接口
- VTK:结构化网格之StructuredGrid
- Linux下安装MongoDB3.2.5(自测)
- 手机支持html5绘图性能,【高级系列】Canvas绘制性能专题
- 2016-5-31 项目结构调整
- PostgreSQL中的“use database_name”命令
- 13.分布式锁面试题(高频面试题)
- Andorid连接USB打印机
- Python流程控制
- 金仓数据库KingbaseES之自增列
- 安卓手机格式化后怎么恢复
- 光猫路由器与交换机的连接方式
- matlab谐波含量,基于谐波检测中的数字低通滤波器的MATLAB设计
- 向量空间中的基底和基变换以及坐标变换
- 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历
- 批量修改本地文件.bat命令使用与node.js批量修改文件
- 使用Office内置的VBA编辑器实现WORD文档的批量查找替换
- C++中关于二维矩阵和三维矩阵的计算
热门文章
- 记一次maven项目打包成exe文件过程
- BootStrap使用方法为BootStrap3添加jquery.min.js文件(简单易懂)_☆往事随風☆的博客
- wav文件头格式详解
- wps js宏模拟cookie绕过网站登录验证请求数据
- 从Nearest插值到Bilinear插值的分析与python实现
- Jsoup Cookie登录处理
- java里shake是什么意思_在英文里shake是什么意思意思 , 英语单词shake中文是什么啊...
- [AndroidStudio]安装、启动、模拟器相关、adb命令
- Linux之tcpdump抓包命令详解
- Guava:Ordering对象多属性排序