最近开发的系统反馈回来一个问题,是因为,图片中的CMYK不支持页面显示,在进行缩略图的时候,页面中的小图片不能显示出来。后台google一下,java可以实现rmyk转成RGB的格式。具体方法;仅供参考
package com.util;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.commons.lang.StringUtils;
public class CmykToRgb {
/**
* Creates new RGB images from all the CMYK images passed
* * in on the command line.
* * The new filename generated is, for example "GIF_original_filename.gif".
**
**/
public static void main(String[] args) {
String filename = "d:\\2889.JPG";
boolean cmyk = isCMYK(filename);
System.out.println(cmyk + ": " + filename);
if (cmyk){
try{
String rgbFile = cmyk2rgb(filename);
System.out.println(isCMYK(rgbFile) + ": " + rgbFile);
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
/** * If 'filename' is a CMYK file, then convert the image into RGB,
* * store it into a JPEG file, and return the new filename.
* * * @param filename
* */
private static String cmyk2rgb(String filename) throws IOException{
// Change this format into any ImageIO supported format.
String format = "gif";
File imageFile = new File(filename);
String rgbFilename = filename;
BufferedImage image = ImageIO.read(imageFile);
if (image != null){
int colorSpaceType = image.getColorModel().getColorSpace().getType();
if (colorSpaceType == ColorSpace.TYPE_CMYK){
BufferedImage rgbImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
ColorConvertOp op = new ColorConvertOp(null);
op.filter(image, rgbImage);
rgbFilename = changeExtension(imageFile.getName(), format);
rgbFilename = new File(imageFile.getParent(), format + "_" + rgbFilename).getPath();
ImageIO.write(rgbImage, format, new File(rgbFilename));
}
}
return rgbFilename;
}
/** * Change the extension of 'filename' to 'newExtension'.
* * * @param filename
* * @param newExtension
* * @return filename with new extension
* */
private static String changeExtension(String filename, String newExtension){
String result = filename;
if (filename != null && newExtension != null && newExtension.length() != 0); {
int dot = filename.lastIndexOf('.');
if (dot != -1){
result = filename.substring(0, dot) + '.' + newExtension;
}
}
return result;
}
private static boolean isCMYK(String filename){
boolean result = false;
BufferedImage img = null;
try{
img = ImageIO.read(new File(filename));
}catch (IOException e){
System.out.println(e.getMessage() + ": " + filename);
} if (img != null){
int colorSpaceType = img.getColorModel().getColorSpace().getType();
result = colorSpaceType == ColorSpace.TYPE_CMYK;
}
return result;
}
}
分享到:
相关推荐
还在为ie无法显示cmyk格式的jpg图片烦恼吗。本代码完全完整cmyk转rgb 严格经过测试
本项目为Java图像处理小工具。本Java工具包提供图片色彩空间的转换、图片dpi刷新的能力。我们经常用到的色彩空间主要有RGB、...目前Jar包只支持将图片由RGB模式转换为CMYK模式,转换后的图片为TIFF格式,后缀为'.tif'。
解决ps编辑的图片或本身图片格式是cmyk格式,java.awt包无法读取问题。 官方下载的压缩包。 里面有说明文档和icc文件。如:ISOcoated_v2_300_eci.icc、ISOcoated_v2_eci.icc、ISOuncoatedyellowish.icc、SC_paper_...
guide, 在Java中,关于图像处理的文章草稿 Java图像处理生存指南对于一些客户我需要做大量的图片处理数百万的图片- 其中很多是用户提供将各种图像格式转换为jpeg格式将pdf转换为jpeg格式重采样图像处理CMYK图像用...
ISOcoated_v2_300_han.icc 用于处理图片的格式转换 例如 RGB转CMYK 本人亲测 java可行
ImageMagick是免费软件:全部源码开放,...ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DO
图片的 裁剪、镜像、缩放、模糊、加水印、旋转等操作,支持100多种图片格式,处理cmyk和rgb比较好,相比java处理不会出现变色
ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2...
JAI工具,操作图片资源,java通过这个工具能将cmyk的bufferedImage生成tiff格式
ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2...
ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2...
图片梦PNG或JPG格式的图像编辑软件选项爬亮度新增图片减去图像本地二值化全局二值化通道二值化直方图二值化伪彩色对比罗伯特·埃奇普威特的边缘索贝尔的边缘筛选将图像更改为CMYK 将图像更改为HSI