2008-08-22 4 views
8

मैं आरजीबी के लिए सीएमवाइके से छवियों को परिवर्तित करने के लिए एक की जरूरत है - जरूरी नहीं कि ColdFusion 8 की रिलीज के साथ फिर से वापस है, लेकिन हे, अगर यह किया जा सकता है ...मैं कोल्डफ्यूजन (जावा) में सीएमवाईके और आरजीबी के बीच छवियों को कैसे परिवर्तित करूं?

, हम CFImage टैग मिला, लेकिन यह नहीं करता है इस रूपांतरण का समर्थन नहीं करते; और न ही Image.cfc, या Alagad's Image Component करता है।

हालांकि, यह जावा में संभव होना चाहिए; जिसे हम सीएफ के माध्यम से लाभ उठा सकते हैं।

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

मैं एक ऐसी ही विधि लगता होगा इस छवि रूपांतरण करने के लिए लाभ उठाने के लिए जावा में इस्तेमाल किया जा सकता है, लेकिन एक जावा डेवलपर, मैं डॉन नहीं किया जा रहा: उदाहरण के लिए, आप निम्न तरीके से एक ऐसी प्रक्रिया है सोने के लिए एक जावा धागा बना सकता है शुरू करने के लिए एक सुराग नहीं है। क्या कोई यहां हाथ उधार दे सकता है?

+0

इस उदाहरण में 0 और 255^2 के बीच मूल्य होंगे। तो यह रूपांतरण का सही उदाहरण नहीं है। –

उत्तर

5

मैं जावा ImageIO पुस्तकालयों (https://jai-imageio.dev.java.net) का उपयोग करें। वे सही नहीं हैं, लेकिन सरल हो सकते हैं और काम पूरा कर सकते हैं। जहां तक ​​सीएमवाईके से आरजीबी में परिवर्तित हो रहा है, यहां तक ​​कि सबसे अच्छा है जिसके साथ मैं आने में सक्षम हूं।

अपने प्लेटफ़ॉर्म के लिए छविIO JARs और मूल पुस्तकालयों को डाउनलोड और इंस्टॉल करें। देशी पुस्तकालय आवश्यक हैं। उनके बिना ImageIO JAR फ़ाइलें 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 का एक जेपीजी उत्पन्न किया। यकीन नहीं है कि क्यों। कोई विचार? –

10

एक सीएमवाइके से परिवर्तित सब रंग प्रोफ़ाइल अनदेखी आरजीबी के लिए के लिए बहुत ही सरल सूत्र है:

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

इस कोड 0-255 के क्रोध में होने की सीएमवाइके मूल्यों की आवश्यकता है। यदि आपके पास 0 से 100 या 0.0 से 1.0 है तो आपको मानों को रूपांतरित करना होगा।

आशा है कि यह आपको शुरू कर देगा।

जावा और कोल्डफ्यूजन इंटरफेसिंग के लिए, मुझे खेद है, लेकिन मुझे नहीं पता कि यह कैसे करना है।

1

टैग cfx_image आपके लिए उपयोग किया जा सकता है। मैंने थोड़ी देर में इसका इस्तेमाल नहीं किया है, लेकिन मुझे याद है कि इसमें कई टन विशेषताएं थीं।

वैकल्पिक रूप से, आप छवियों को संसाधित करने के लिए इरफानव्यू (cfexecute का उपयोग करके कमांडलाइन के माध्यम से) जैसे विंडोज ऐप को स्क्रिप्ट करने में सक्षम हो सकते हैं।

आशा है कि मदद करता है

0

मुझे पता है कि इस सवाल का पुराना है, लेकिन मैं अभी भी सीएमवाइके छवियों & ColdFusion साथ समस्याओं का सामना। हालांकि, मैंने सिर्फ कोल्डफ्यूजन 10 का उपयोग करके एक सीएमवाईके जेपीईजी छवि पढ़ी और इसे बचाया। सहेजी गई छवि कोल्डफ्यूजन 9 का उपयोग करके पढ़ने में सक्षम था (जो केवल आरजीबी जेपीईजी पढ़ने में सक्षम है।) मुझे यकीन नहीं है कि यह रूपांतरण जानबूझकर है या नहीं और मेरे पास वर्तमान में यह पहचानने का कोई तरीका नहीं है कि स्रोत छवि का रंग प्रोफ़ाइल CMYK है या नहीं, क्योंकि सहेजे गए रंग प्रोफाइल अभी भी वही प्रतीत होते हैं।

<cfset imgData = ImageRead(expandPath("./CMYK_image.jpg"))> 
<cfset ImageWrite(imgData, expandPath("./Saved_image.jpg"))> 
संबंधित मुद्दे