java 实现cmyk转图片格式

最近开发的系统反馈回来一个问题,是因为,图片中的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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值