2008-08-22 6 views
8

내가 RGB로 CMYK 이미지를 변환 할 필요가 - 그것을 할 수 있다면 반드시 ColdFusion에서 8의 출시와 함께 ..., 헤이ColdFusion (Java)에서 CMYK와 RGB 사이에서 이미지를 변환하려면 어떻게합니까?

을 다시 아니지만을, 우리는 CFImage 태그를 가지고 있지만, 아무튼 이 변환을 지원하지 않습니다. Image.cfc 또는 Alagad's Image Component도 아닙니다.

그러나 Java에서 가능해야합니다. CF를 통해 활용할 수 있습니다. 이 이미지의 변환을 수행하기 위해 자바를 활용하는 데 사용할 수

<cfset jthread = createObject("java", "java.lang.Thread")/> 
<cfset jthread.sleep(5000)/> 

내가 비슷한 방법을 거라 생각하지만, 자바 개발자, 나는 돈없는 예를 들어, 여기 당신이 과정을 잠 자바 스레드를 만들 수있는 방법 시작해야 할 단서가 없습니다. 누구든지 여기 손 빌려 줄 수 있니? 모든 색 정보를 무시하는 RGB에서 CMYK 변환

+0

이 예제에는 0에서 255^2 사이의 값이 있습니다. 따라서 올바른 전환의 예가 아닙니다. –

답변

5

을하는 데 도움이

희망 나는 자바 ImageIO에서 라이브러리 (https://jai-imageio.dev.java.net)를 사용합니다. 그들은 완벽하지는 않지만 간단하고 일을 끝낼 수 있습니다. 지금까지 CMYK에서 RGB로 변환하는 방법을 생각해 볼 때 가장 좋은 방법은 다음과 같습니다.

다운로드 및 플랫폼에 대한 ImageIO에서 항아리와 네이티브 라이브러리를 설치합니다. 기본 라이브러리는 필수적입니다. ImageIO JAR 파일이 없으면 CMYK 이미지를 감지 할 수 없습니다. 원래 필자는 네이티브 라이브러리가 성능을 향상시킬 수는 있지만 모든 기능에 필요하지는 않다는 인상하에있었습니다. 내가 틀렸어. 내가 눈치

유일하게 다른 것은

변환 된 RGB 이미지는 때로는 CMYK 이미지보다 훨씬 가볍다는 것이다. 누군가가 그 문제를 해결하는 방법을 안다면, 나는 감사하게 여길 것이다. 다음은

는 지원되는 형식의 RGB 이미지로 CMYK 이미지를 변환하는 몇 가지 코드입니다.

, 감사합니다
랜디 Stegbauer

package cmyk; 

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 Main 
{ 

    /** 
    * 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) 
    { 
     for (int ii = 0; ii < args.length; ii++) 
     { 
      String filename = args[ii]; 
      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; 
    } 
} 
+0

아직 테스트하지는 못했지만 답변에 많은 노력을 기울인 것처럼 보입니다. 고마워요! –

+0

안녕 랜디,이 코드를 실행 해 보았지만 0kb의 JPG 만 생성했습니다. 이유를 모르겠다. 어떤 아이디어? –

10

아주 간단한 공식은 다음

 
    R = ((255-C)*(255-K))/255; 
    G = ((255-M)*(255-K))/255; 
    B = ((255-Y)*(255-K))/255; 

이 코드 0-255 분노 판정 CMYK 값을 필요로한다. 0 ~ 100 또는 0.0 ~ 1.0이면 값을 변환해야합니다.

희망이 있으면 시작하겠습니다.

는 자바 및 ColdFusion이 인터페이스로서, 미안 해요,하지만 난 어떻게 그렇게 아무 생각이 없습니다.

1

cfx_image 태그가 유용 할 수 있습니다. 잠시 사용하지는 않았지만 많은 기능이 있다는 것을 기억합니다.

양자 택일로, 당신은 이미지를 처리하기 (명령 행 사용 cfexecute를 통해) 등 IrfanView와 같은 스크립트 윈도우 응용 프로그램을 할 수 있습니다.

0

나는이 질문이 된 것을 알고,하지만 난 여전히 CMYK 이미지 & ColdFusion과 함께 문제가 발생. 그러나 ColdFusion 10을 사용하여 CMYK JPEG 이미지를 읽고 다시 저장했습니다. 저장된 이미지는 ColdFusion 9 (RGB JPEG 만 읽을 수 있음)를 사용하여 읽을 수있었습니다.)이 전환이 의도적인지 여부는 확실하지 않으며 현재 저장된 색상 프로파일이 여전히 동일하게 나타나므로 원본 이미지의 색상 프로파일이 CMYK인지 여부를 식별 할 수있는 방법이 없습니다.

<cfset imgData = ImageRead(expandPath("./CMYK_image.jpg"))> 
<cfset ImageWrite(imgData, expandPath("./Saved_image.jpg"))>