小编典典

我使用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;

}

}

2020-10-09

java cmyk和rgb的转换_如何在ColdFusion(Java)中在CMYK和RGB之间转换图像?相关推荐

  1. java 合并和拆分单元格_如何在Microsoft Word中合并和拆分表和单元格

    java 合并和拆分单元格 You can easily merge and split cells in Microsoft Word to make your tables more intere ...

  2. java开发给cad加水印_如何在autocad文件中添加水印

    在打印一些重要文件时给文件加上水印,例如"绝密"."保密"的字样,能让获得文件的人都知道该文件的重要性.Word2003具有添加文字和图片两种类型水印的功能,水 ...

  3. JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  4. java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础

    <实验项目1 Java开发环境与语言基础>由会员分享,可在线阅读,更多相关<实验项目1 Java开发环境与语言基础(14页珍藏版)>请在人人文库网上搜索. 1.实验项目1 Ja ...

  5. java工程如何跑起来的_你编写的Java代码是咋跑起来的?

    如果你是一名 Java 开发人员,你肯定指定 Java 代码有很多种不同的运行方式.比如说可以在开发工具(IDEA.Eclipse等)中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至 ...

  6. java 父类返回子类是咧_【daily】Java泛型 - 返回父类的子类

    一.栗子 public class GenericityInher { //error: Type mismatch: cannot convert from ArrayList to ArrayLi ...

  7. ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密

    **PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...

  8. java电商秒杀深度优化_【B0796】Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程...

    Java视频教程名称:Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程    java自学网[javazx.com]  性能视频教程   it教程 Java自学网收集整理 java论 ...

  9. java实验报告金陵科技学院_金陵科技学院java

    <Java语言程序设计>学生信息管理_理学_高等教育_教育专区.学生信息管理系统,金陵科技学院 <Java 语言程序设计>课程考查报告 题 目: 学生信息管理程序 学生姓名.. ...

  10. java用对话框输出计算结果_动手动脑及java程序之用消息框进行数的运算

    动手动脑自信成就人生 动手动脑1 ✿仔细阅读示例: EnumTest.java,运行它,分析运行结果? package demo; public class Test { public static ...

最新文章

  1. 周志华等人新著!国内第一部AI本科专业教育培养体系出炉
  2. requests + BeautifulSoup + json
  3. Genymotion模拟器拖入文件报An error occured while deploying the file的错误
  4. python网络编程学习笔记(4):域名系统
  5. php mysql 地理位置_MySQL版中国省市区地址地区信息数据表
  6. 使用python脚本将XML 电子表格转变为Excel
  7. parseInt原来是这样用的
  8. 程序员降薪求职到底该不该?
  9. Python-Matplotlib可视化(9)——精通更多实用图形的绘制
  10. oracle 闪回总结
  11. 斗鱼上市,直播圈“战火”再起,海店湾:狭路相逢勇者胜!
  12. MiniDP与HDMI的关系
  13. 2018国内VR游戏现状
  14. arcgis去除遥感影像黑边
  15. 中病毒了文件夹变exe文件找到方法
  16. 商战传奇:周鸿祎死磕雷军的背后的三重玄机
  17. linux lightdm自动登录,设置了XFCE/lightDM启用自动登录,还是需要'点击'登录两字才能进入桌面...
  18. python ljust()、center() 、rjust() 字符串填充左中右对齐
  19. 8卡gpu服务器是8个芯片,北京8卡GPU服务器厂商
  20. 一文搞懂Spring,堪称Spring源码终结者

热门文章

  1. linux添加usb扫描枪,抓取扫描枪扫描数据的案例
  2. STM32F103RC单片机ADC1使用TIM1自动触发注入通道组的AD转换
  3. 无刷直流电机学习笔记5
  4. android图标分组名称唯美简单可复制,分组名称唯美简短的
  5. java经典算法(五)---zws
  6. linux 修改密码 authen,Linux系统下root用户执行passwd修改密码时报错Authentication to
  7. 服务器主机本地系统服务受限,Win10系统出现服务主机本地系统网络受限怎么办 如何解决...
  8. 将鼠标放在A标签上时浏览器左下角会显示跳转后界面地址,如何隐藏
  9. 如何在 Next.js 中实现重定向
  10. 双基因突变患者_我的肺癌没有基因突变,这是好是坏?