ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(下)

在经过一系列探索,《ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(上)》篇已经通过Jimi初步解决,但在Linux平台下必须开图形界面才行,但现实情况,服务器一般运行在init 3级别下,init 5不太现实,另外Jimi对象图片的处理也较差,部分图片重写后质量降低,模糊等,由此也证明了Java语言在处理图片上的劣势,这是非常让人纠心的事,最终只能借助于无敌的ImageMagick结合对应的JNI接口JMagick来完成,上篇《ImageMagick,Jmagick-linux_64安装说明》已经介绍了该软件在Linux下的安装过程,下面我们看看使用JMagick如何实现图片高质量重写。

import java.io.IOException; import magick.ImageInfo; import magick.MagickImage; /** * Created on 2011-11-1 *@author:[[email protected]] */ public class ImageTypeTest { static { if (System.getProperty("jmagick.systemclassloader") == null) { System.setProperty("jmagick.systemclassloader", "no"); System.err.println(System.getProperty("java.library.path")); } try { MagickImage.class.getClass(); } catch (Error e) { System.err.println("Make sure JMagick libraries are available in java.library.path. Current value: "); System.err.println("java.library.path=" + System.getProperty("java.library.path")); throw e; } } /** * Created on 2011-11-1 * @throws IOException * @author:[[email protected]] */ public final static void filterImageByScale(String srcFileName) throws IOException{ MagickImage magic = null; try { ImageInfo imgInfo = new ImageInfo(srcFileName); magic = new MagickImage(imgInfo); int width = (int) magic.getDimension().getWidth(); int height = (int) magic.getDimension().getHeight(); MagickImage newImage = magic.scaleImage(width, height); newImage.profileImage("*", null); newImage.setImageAttribute("JPEG-Sampling-factors", null); newImage.setImageAttribute("comment", null); newImage.setFileName("d:/img/bbb.jpg"); newImage.writeImage(new ImageInfo()); magic.destroyImages(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args){ String srcFileName = "d:/img/aaa.png"; try{ filterImageByScale(srcFileName); }catch (IOException e){ e.printStackTrace(); } } }
这样,彻底解决了图片跨平台处理的问题,而且服务器也不依赖于init 5级别运行。


你可能感兴趣的:(ImageIO.read()方法读取图片后重写,图片蒙上一层红色的解决办法(下))