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颜色模式图片裁剪异常现象处理...相关推荐

  1. php生成cmyk图片,用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!...

    各位好!我在php里用ImageMagick创建cmyk颜色的图片,在photoshop中显示的cmyk值不一样!比如:在ImageMagick通过ImagickPixel设置的颜色为cmyk(0,0 ...

  2. java 批量上传图片插件_java多文件上传plupload控件实现多图片上传(一)

    使用的是plupload-2.1.2 控件.网上资源挺多的,很好下载. plupload 官方地址 : http://www.plupload.com/ plupload 示例: http://www ...

  3. java中上传文件_Java中文件上传下载 --使用Minio

    Minio模板类: @RequiredArgsConstructor public class MinioTemplate implements InitializingBean { private ...

  4. java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法

    本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...

  5. java 字符终端库_Java 字符终端上获取输入三种的方式分享

    在java 字符终端上获取输入有三种方式: 1.java.lang.system.in (目前jdk版本均支持) 2.java.util.scanner (jdk版本>=1.5) 3.java. ...

  6. 苹果cms图片采集到网站服务器上,解决苹果cms后台采集数据不显示图片的问题

    大家都有遇到过吧,后台采集的数据图片地址全都多一条代码这样图片就不显示了 下面我就给大家一个解决方法.资源站又玩新花样了,大家第一组代码替换无效请用第二组代码替换 注意:V10和8操作代码是不一样的. ...

  7. java大文件 索引_JAVA 大文件上传解决方案(500M以上)

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  8. JAVA 实现FTP功能_Java实现FTP上传下载功能

    public classFtp {private static final Logger logger = Logger.getLogger(FTP.class);/*** FTP客户端*/ priv ...

  9. java中检测鼠标_java – 在屏幕上检测鼠标移动

    完全透明的框架不会接收鼠标事件. 这是使用MouseInfo的替代方法.这适用于应用程序的组件.是不可见的(透明的),未聚焦的或最小化的. import java.awt.*; import java ...

最新文章

  1. gin.context 怎么在其他包中获取 只能传递吗_跨进程传递大图,你能想到哪些方案呢?...
  2. 提高jQuery执行效率
  3. Java编程基础10——面向对象_多态抽象类接口
  4. VTK:结构化网格之StructuredGrid
  5. Linux下安装MongoDB3.2.5(自测)
  6. 手机支持html5绘图性能,【高级系列】Canvas绘制性能专题
  7. 2016-5-31 项目结构调整
  8. PostgreSQL中的“use database_name”命令
  9. 13.分布式锁面试题(高频面试题)
  10. Andorid连接USB打印机
  11. Python流程控制
  12. 金仓数据库KingbaseES之自增列
  13. 安卓手机格式化后怎么恢复
  14. 光猫路由器与交换机的连接方式
  15. matlab谐波含量,基于谐波检测中的数字低通滤波器的MATLAB设计
  16. 向量空间中的基底和基变换以及坐标变换
  17. 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历
  18. 批量修改本地文件.bat命令使用与node.js批量修改文件
  19. 使用Office内置的VBA编辑器实现WORD文档的批量查找替换
  20. C++中关于二维矩阵和三维矩阵的计算

热门文章

  1. 记一次maven项目打包成exe文件过程
  2. BootStrap使用方法为BootStrap3添加jquery.min.js文件(简单易懂)_☆往事随風☆的博客
  3. wav文件头格式详解
  4. wps js宏模拟cookie绕过网站登录验证请求数据
  5. 从Nearest插值到Bilinear插值的分析与python实现
  6. Jsoup Cookie登录处理
  7. java里shake是什么意思_在英文里shake是什么意思意思 , 英语单词shake中文是什么啊...
  8. [AndroidStudio]安装、启动、模拟器相关、adb命令
  9. Linux之tcpdump抓包命令详解
  10. Guava:Ordering对象多属性排序