首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 兑现cmyk转图片格式

2012-11-21 
java 实现cmyk转图片格式最近开发的系统反馈回来一个问题,是因为,图片中的CMYK不支持页面显示,在进行缩略

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;    
}
} 2 楼 lvhongfen 2012-03-26   关键点是:在判断是否是cmyk图片中LZ的方法isCMYK(file)中
ImageIO.read(new File(filename)); 根本就没法读取cmyk的图片

热点排行