java cmyk和rgb的转换_如何在ColdFusion(Java)中在CMYK和RGB之间转换图像?
小编典典
我使用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之间转换图像?相关推荐
- java 合并和拆分单元格_如何在Microsoft Word中合并和拆分表和单元格
java 合并和拆分单元格 You can easily merge and split cells in Microsoft Word to make your tables more intere ...
- java开发给cad加水印_如何在autocad文件中添加水印
在打印一些重要文件时给文件加上水印,例如"绝密"."保密"的字样,能让获得文件的人都知道该文件的重要性.Word2003具有添加文字和图片两种类型水印的功能,水 ...
- JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础
<实验项目1 Java开发环境与语言基础>由会员分享,可在线阅读,更多相关<实验项目1 Java开发环境与语言基础(14页珍藏版)>请在人人文库网上搜索. 1.实验项目1 Ja ...
- java工程如何跑起来的_你编写的Java代码是咋跑起来的?
如果你是一名 Java 开发人员,你肯定指定 Java 代码有很多种不同的运行方式.比如说可以在开发工具(IDEA.Eclipse等)中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至 ...
- java 父类返回子类是咧_【daily】Java泛型 - 返回父类的子类
一.栗子 public class GenericityInher { //error: Type mismatch: cannot convert from ArrayList to ArrayLi ...
- ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密
**PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...
- java电商秒杀深度优化_【B0796】Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程...
Java视频教程名称:Java性能优化亿级流量秒杀方案及电商项目秒杀实操2020视频教程 java自学网[javazx.com] 性能视频教程 it教程 Java自学网收集整理 java论 ...
- java实验报告金陵科技学院_金陵科技学院java
<Java语言程序设计>学生信息管理_理学_高等教育_教育专区.学生信息管理系统,金陵科技学院 <Java 语言程序设计>课程考查报告 题 目: 学生信息管理程序 学生姓名.. ...
- java用对话框输出计算结果_动手动脑及java程序之用消息框进行数的运算
动手动脑自信成就人生 动手动脑1 ✿仔细阅读示例: EnumTest.java,运行它,分析运行结果? package demo; public class Test { public static ...
最新文章
- 周志华等人新著!国内第一部AI本科专业教育培养体系出炉
- requests + BeautifulSoup + json
- Genymotion模拟器拖入文件报An error occured while deploying the file的错误
- python网络编程学习笔记(4):域名系统
- php mysql 地理位置_MySQL版中国省市区地址地区信息数据表
- 使用python脚本将XML 电子表格转变为Excel
- parseInt原来是这样用的
- 程序员降薪求职到底该不该?
- Python-Matplotlib可视化(9)——精通更多实用图形的绘制
- oracle 闪回总结
- 斗鱼上市,直播圈“战火”再起,海店湾:狭路相逢勇者胜!
- MiniDP与HDMI的关系
- 2018国内VR游戏现状
- arcgis去除遥感影像黑边
- 中病毒了文件夹变exe文件找到方法
- 商战传奇:周鸿祎死磕雷军的背后的三重玄机
- linux lightdm自动登录,设置了XFCE/lightDM启用自动登录,还是需要'点击'登录两字才能进入桌面...
- python ljust()、center() 、rjust() 字符串填充左中右对齐
- 8卡gpu服务器是8个芯片,北京8卡GPU服务器厂商
- 一文搞懂Spring,堪称Spring源码终结者
热门文章
- linux添加usb扫描枪,抓取扫描枪扫描数据的案例
- STM32F103RC单片机ADC1使用TIM1自动触发注入通道组的AD转换
- 无刷直流电机学习笔记5
- android图标分组名称唯美简单可复制,分组名称唯美简短的
- java经典算法(五)---zws
- linux 修改密码 authen,Linux系统下root用户执行passwd修改密码时报错Authentication to
- 服务器主机本地系统服务受限,Win10系统出现服务主机本地系统网络受限怎么办 如何解决...
- 将鼠标放在A标签上时浏览器左下角会显示跳转后界面地址,如何隐藏
- 如何在 Next.js 中实现重定向
- 双基因突变患者_我的肺癌没有基因突变,这是好是坏?