1.在项目中为了处理用户上传的图片,会对图片进行重写处理,故使用了类似下面的代码:
原图如下:
但发现对于CMYK模式的图片ImageIO.read方法在读取时,会丢失掉ICC信息,从面导致重写后的图片上面蒙受上一层红色如下:
显然对图片质量的影响非常大,在用户体验非常高的互联网上是没法让用户接受的,于是又改用另外一种获取Image对象的方法如下:
但该方法在Windows平台下使用正常,而在Linux平台上总是报异常如下:
然后按照网上的方法,运行的时候加了-Djava.awt.headless=true即 java -Djava.awt.headless=true ClassName 但接着报如下异常:
原因是:Toolkit.getDefaultToolkit()方法中有一句
其实这句话的意思是该程序运行需要有图片环境的支持,后来经过测试,在Linux开了图形窗口后运行也是正常的,但对于生产环境的服务器要开个图形界面是不太现实的,最终放弃了这种方案。经过探索在Linux下只能选用ImageMagick结合JMagick实现,此时能独立于X-11系统,请看下篇,ImageMagick,Jmagick-linux_64安装说明
注意:
1.使用Jimi1.0 版本,保存PICT文件格式时输出的图像宽、高和内存中的图像源一致,可是显示出来却是纯白的。这是 Jimi1.0 版本对写Pict格式的一处 BUG,下载了新的补订类PICTWriter.java 重新编译成PICTWriter.class加入 JimiProClasses.zip 中覆盖原有的 PICTWriter.class,遂写 PICT 格式成功。可以参考官方说明:http://amug.org/~glguerin/other/index.html#PICTWriter 编译时注意要兼容你的JDK版本。
2.关于ImageIO.read()方法读取图片时不能正确处理ICC信息的问题,一般这些图片,是由扫描仪扫描,或者数码相机拍摄,并且处理时,图片的颜色空间(colorspace)为CMYK模式,可以参考官方BUG说明:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6245283
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6404011
另外处理相关ICC信息的代码如下:
在经过一系列探索,《ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(上)》篇已经通过Jimi初步解决,但在Linux平台下必须开图形界面才行,但现实情况,服务器一般运行在init 3级别下,init 5不太现实,另外Jimi对象图片的处理也较差,部分图片重写后质量降低,模糊等,由此也证明了Java语言在处理图片上的劣势,这是非常让人纠心的事,最终只能借助于无敌的ImageMagick结合对应的JNI接口JMagick来完成,上篇《ImageMagick,Jmagick-linux_64安装说明》已经介绍了该软件在Linux下的安装过程,下面我们看看使用JMagick如何实现图片高质量重写。
这样,彻底解决了图片跨平台处理的问题,而且服务器也不依赖于init 5级别运行。
分享到:
相关推荐
NULL 博文链接:https://o-oand0-0.iteye.com/blog/1585854
NULL 博文链接:https://zhangmingji.iteye.com/blog/1969693
javax.imageio-1.0.5.jar, java处理图片的库。 从maven中央仓库下载的。实测可用。
做OCR项目时用到的tesseract相关技术工作包,找起来还蛮麻烦的,放在这里给各位技术朋友们免费下载。
com.sun.media.imageio.plugins.tiff.TIFFImageWritePar 报错,很多同学找不到 这个jai_imageio-1.1-alpha.jar 提供下下载
内含: luciad-webp-imageio-2962dd563583 libwebp-0.4.0.tar.gz cmake-3.1.0-rc2-Linux-i386.tar.gz
ImageIo.dll提供了图片处理、格式转换的程序接口
Exception in thread “main” javax.imageio.IIOException: Can’t read input file!:无法读取输入文件! 原可以从两个方面分析: 路径中文乱码问题 target/classes文件夹中并没有找到图片 加粗样式看下代码: ...
webp-imageio-0.4.2.zip 包含:.jar .so/.dll 涵盖linux 32/64 windows 32/64 版本
java高级图片处理工具 jai-imageio,可以修改图片分辨率等
主要介绍了java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决的相关资料,需要的朋友可以参考下
imageio.jar .
imageio的下载资源,下载之后通过python直接安装到环境就可以使用了
jai_codec-1.1.3.jar jai_core.jar jai_imageio.jar jimi-1.0.jar
使用BitmapFactory加载图片时,如果图片过大可能引起OutOfmemory溢出的问题。解决办法。
TwelveMonkeys, TwelveMonkeys ImageIO 最新版本主分支生成状态: 最新版本是 TwelveMonkeys ImageIO 3.3.2 ( Feb ) 。 2年,2017年,发行说明。TwelveMonkeys ImageIO是 java ImageIO的插件和扩展的C
3个jar包: jai_core-1.1.3.jar jai_imageio.jar jai-codec-1.1.3.jar
imageio 2.3.0版本,下载到本地进行安装,直接pip安装可能因为下载文件速度太慢而报错。安装方法:1.打开cmd 2.安装whl文件,pip install imageio-2.3.0-py2.py3-none-any.whl(依赖会自行安装,下载速度还可以)
用法将 webp-imageio.jar 添加到应用程序的类路径确保 libwebp-imageio.so、libwebp-imageio.dylib 或 webp-imageio.dll 可在 Java 本机库路径(java.library.path 系统属性)上访问WebP 读取器和写入器可以像任何...