2008-08-22 38 views
8

私はRGBにCMYKから画像を変換する必要がある - 必ずしも再びが、しかしそれは、ColdFusion 8のリリースでは...ColdFusion(Java)でCMYKとRGBの間で画像を変換するにはどうすればよいですか?

を行うことができるかどうかねえ、私たちはCFImageタグを得たが、それはdoesnのこの変換をサポートしていません。 Image.cfc、またはAlagad's Image Componentもありません。

ただし、Javaでは可能です。私たちはCFを活用することができます。この画像変換を行うためにJavaを活用するために使用することができ

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

が、私は同様の方法を推測するだろうが、Java開発者、Iドンされていない:たとえば、ここにあなたがプロセスをスリープ状態にするJavaスレッドを作成することができます方法ですどこから始めるべきかわからない。誰もここに手を貸せますか?

+0

この例の値は0〜255^2です。したがって、正しい変換の例ではありません。 –

答えて

5

に役立ちます願っています。彼らは完璧ではありませんが、シンプルで仕事を終わらせることができます。 CMYKからRGBへの変換に関しては、私が思いついた最高のものがここにあります。

ご使用のプラットフォーム用のImageIO JARおよびネイティブライブラリをダウンロードしてインストールします。ネイティブライブラリは不可欠です。それらがなければ、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

すべてのカラープロファイルを無視してRGBにCMYKから変換するための非常に単純な式は:

 
    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の場合、値を変換する必要があります。

希望すると、これが始まります。

JavaとColdFusionのインターフェースについては、申し訳ありませんが、どうすればいいのかわかりません。

1

タグcfx_imageはあなたに有用であり得ます。私はしばらくそれを使用していないが、私はそれが多くの機能を持っていた覚えている。

また、irfanviewなどのWindowsアプリケーション(cfexecuteを使用してコマンドライン経由で)を処理して画像を処理することができます。

私は、JavaのImageIOライブラリ(https://jai-imageio.dev.java.net)を使用

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"))> 
関連する問題