我需要将图像从CMYK转换为RGB - 不一定再回来了,但是嘿,如果可以的话......

随着ColdFusion 8的发布,我们获得了CFImage标签,但它不支持这种转换; Image.cfcAlagad的Image Component也没有。

但是,应该可以用Java; 我们可以通过CF来利用它。 例如,以下是创建Java线程以休眠进程的方法:

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

我猜可以使用类似的方法来利用java来进行这种图像转换,但不是Java开发人员,我不知道从哪里开始。 任何人都可以在这里伸出援手吗?

===============>>#1 票数:10

从CMYK转换为RGB的非常简单的公式忽略所有颜色配置文件:

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

此代码要求CMYK值的范围为0-255。 如果您有0到100或0.0到1.0,则必须转换值。

希望这会让你开始。

至于java和ColdFusion接口,我很抱歉,但我不知道该怎么做。

===============>>#2 票数:5 已采纳

我使用Java ImageIO库( https://jai-imageio.dev.java.net )。 它们并不完美,但可以很简单并完成工作。 至于从CMYK转换为RGB,这是我能够想到的最好的。

下载并安装适用于您的平台的ImageIO JAR和本机库。 本地库是必不可少的。 没有它们,ImageIO JAR文件将无法检测CMYK图像。 最初,我的印象是本机库可以提高性能,但不需要任何功能。 我错了。

我注意到的另一件事是转换的RGB图像有时比CMYK图像轻得多。 如果有人知道如何解决这个问题,我会很感激。

下面是一些代码,用于将CMYK图像转换为任何支持格式的RGB图像。

谢谢,
兰迪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;
    }
}

===============>>#3 票数:1

标签cfx_image可能对您有用。 我有一段时间没有使用它,但我记得它有很多功能。

或者,您可以编写一个Windows应用程序脚本,例如Irfanview(通过使用cfexecute的命令行)来处理图像。

希望有所帮助

===============>>#4 票数: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"))>

  ask by Adam Tuttle translate from so

未解决问题?本站智能推荐:

2回复

如何在Coldfusion中捕获缺少图像的404响应?

我正在使用自定义的书面自动上传器,将用户的图像导入Amazon S3 。 我正在数据库中建立一个并行image library ,因此我知道可以在S3上访问哪些图像而不会浪费任何http请求。 但是,我的上传器有时会抛出错误(例如,缺少源图像),尽管我正在验证,但有时还是以媒体表中的条目
2回复

在Java中将图像从CMYK转换为RGB

我已经尝试了两天,以找到一种在Java中将CMYK图像完美转换为RGB图像的方法。 我经历了很多不同的方法来实现它,所有的方法都可以在Web上找到,其中一些可以在Stackoverflow上找到,但是我不能简单地找到一种简单的方法来实现,而且没有这种转换所特有的可怕的褪色效果。 。 我知道像
2回复

ColdFusion:从图像标签中剥离图像标签属性

我正在使用YUI富文本编辑器来格式化我正在构建的CMS中的textarea。 CMS允许用户上载并包括图像(其博客应用程序)。 在将textarea的内容写入数据库之前,我希望ColdFusion定位所有图像标签,并去除除SRC之外的任何无关属性。 例如: 应以另一端出现:
1回复

使用ColdFusion在Microsoft Word中嵌入图像

最近,我的应用程序已从ColdFusion 8迁移到9。我在MS Word中显示图像时遇到问题。 这是我的代码。 它给我的图像找不到带有十字标记的问题。 相同的代码在ColdFusion 8中工作正常。有人有任何建议吗?
1回复

如何避免在Coldfusion中调整大小的图像模糊?

我正在使用Coldfusion8调整大小并保存一些图像。 但是,无论大小如何,所有图像都会模糊,而且我不知道如何将其关闭。 这就是我在做什么: 知道我在做什么错吗? 无论我转换为800x1110px还是以上100x127,图像均会模糊。 基本图片很清晰,因此调整大小时一定是我
2回复

使用Coldfusion将图像从CFHTTP filecontent转换为二进制数据

我正在尝试将通过cfhttp加载的图像(jpg)转换为二进制数据。 我不能使用cffile action="readBinary"因为它不是本地文件。
1回复

使用coldfusion 8将图像添加到Excel文档中的行

使用Coldfusion 8有没有人能够将图像嵌入excel电子表格(xlsx)或通过img src链接它们? 一些背景信息:cf服务器将拾取带有产品行的Excel文档。 根据产品ID和样式等,我可以找到或创建一个图像,将其作为第一列添加到现有的Excel文档中。 我知道coldf
1回复

在PDF中使用iText或cfPDF在Coldfusion 8中调整图像问题的大小

当我将图像插入到现有的PDF文件中(例如CFPDF或iText文件中)时,我的图像大小增加了1.5。 如何控制图像尺寸? 我的代码的灵感来自: 使用ColdFusion和iText将动态图像添加到PDF
1回复

Coldfusion在图像路径中添加了额外的双引号

我建立了映像路径,并执行了cfdump来检查正在生成的内容: 运行页面时,我得到以下信息: 当我右键单击图像占位符并复制图像URL时,传递的是: 因此,在扩展URL时,它不会在以下行中删除“ ..和”: 在另一页上,我删除了双引号,然后再将它们放回去,这样就可以了
2回复

Coldfusion表格和图像上传与cffile

我正在学习一些Coldfusion,我在为同事建立这个基于小型表格的应用程序时遇到了麻烦。 这是第一页: http : //pastebin.com/aLPYHPsF 如您所见,我想要做的是获取用户输入并获取该输入并将其输出到html。 文本的东西工作正常,但我无法上传图像! 我