问题描述
找了2个星期,也没有找到合适的答案!头疼!
解决方案
解决方案二:
用java程序转?
解决方案三:
一般都是RGB转的CMYK,没见过CMYK转RGB,一般都有RGB的原图的
解决方案四:
有呀,我就是想用JAVA的程序查看CMYK格式的图片,因为我们公司是做印刷的!
解决方案五:
用下面代码可以读入cmyk图片。//extractmetadatapublicstaticBufferedImagereadImage(Filefile)throwsIOException{//GetanImageReader.ImageInputStreaminput=ImageIO.createImageInputStream(file);Iteratorreaders=ImageIO.getImageReaders(input);if(readers==null||!readers.hasNext()){thrownewRuntimeException("NoImageReadersfound");}ImageReaderreader=(ImageReader)readers.next();reader.setInput(input);Stringformat=reader.getFormatName();if("JPEG".equalsIgnoreCase(format)||"JPG".equalsIgnoreCase(format)){IIOMetadatametadata=reader.getImageMetadata(0);StringmetadataFormat=metadata.getNativeMetadataFormatName();IIOMetadataNodeiioNode=(IIOMetadataNode)metadata.getAsTree(metadataFormat);NodeListchildren=iioNode.getElementsByTagName("app14Adobe");if(children.getLength()>0){iioNode=(IIOMetadataNode)children.item(0);inttransform=Integer.parseInt(iioNode.getAttribute("transform"));Rasterraster=reader.readRaster(0,reader.getDefaultReadParam());if(input!=null)input.close();reader.dispose();returncreateJPEG4(raster,transform);}}thrownewRuntimeException("NoImageReadersfound");}/**Java'sImageIOcan'tprocess4-componentimagesandJava2Dcan'tapplyAffineTransformOpeither,soconvertrasterdatatoRGB.TechniqueduetoMArkStephens.Freeforanyuse.*/privatestaticBufferedImagecreateJPEG4(Rasterraster,intxform){intw=raster.getWidth();inth=raster.getHeight();byte[]rgb=newbyte[w*h*3];//if(Adobe_APP14andtransform==2)thenYCCKelseCMYKif(xform==2){//YCCK--Adobefloat[]Y=raster.getSamples(0,0,w,h,0,(float[])null);float[]Cb=raster.getSamples(0,0,w,h,1,(float[])null);float[]Cr=raster.getSamples(0,0,w,h,2,(float[])null);float[]K=raster.getSamples(0,0,w,h,3,(float[])null);for(inti=0,imax=Y.length,base=0;i<imax;i++,base+=3){floatk=220-K[i],y=255-Y[i],cb=255-Cb[i],cr=255-Cr[i];doubleval=y+1.402*(cr-128)-k;val=(val-128)*.65f+128;rgb[base]=val<0.0?(byte)0:val>255.0?(byte)0xff:(byte)(val+0.5);val=y-0.34414*(cb-128)-0.71414*(cr-128)-k;val=(val-128)*.65f+128;rgb[base+1]=val<0.0?(byte)0:val>255.0?(byte)0xff:(byte)(val+0.5);val=y+1.772*(cb-128)-k;val=(val-128)*.65f+128;rgb[base+2]=val<0.0?(byte)0:val>255.0?(byte)0xff:(byte)(val+0.5);}}else{//assertxform==0:xform;//CMYKint[]C=raster.getSamples(0,0,w,h,0,(int[])null);int[]M=raster.getSamples(0,0,w,h,1,(int[])null);int[]Y=raster.getSamples(0,0,w,h,2,(int[])null);int[]K=raster.getSamples(0,0,w,h,3,(int[])null);for(inti=0,imax=C.length,base=0;i<imax;i++,base+=3){intc=255-C[i];intm=255-M[i];inty=255-Y[i];intk=255-K[i];floatkk=k/255f;rgb[base]=(byte)(255-Math.min(255f,c*kk+k));rgb[base+1]=(byte)(255-Math.min(255f,m*kk+k));rgb[base+2]=(byte)(255-Math.min(255f,y*kk+k));}}//fromotherimagetypesweknowInterleavedRaster'scanbe//manipulatedbyAffineTransformOp,socreateoneofthose.raster=Raster.createInterleavedRaster(newDataBufferByte(rgb,rgb.length),w,h,w*3,3,newint[]{0,1,2},null);ColorSpacecs=ColorSpace.getInstance(ColorSpace.CS_sRGB);ColorModelcm=newComponentColorModel(cs,false,true,Transparency.OPAQUE,DataBuffer.TYPE_BYTE);returnnewBufferedImage(cm,(WritableRaster)raster,true,null);}
解决方案六:
引用4楼sgcl的回复:
用下面代码可以读入cmyk图片。Javacode//extractmetadatapublicstaticBufferedImagereadImage(Filefile)throwsIOException{//GetanImageReader.ImageInputStreaminput=ImageIO……
这个是能读的,可惜颜色不对!