im4java+GraphicsMagick
- package com.jeeplus.modules.isp.utils;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import org.apache.commons.lang3.SystemUtils;
- import org.im4java.core.ConvertCmd;
- import org.im4java.core.IM4JavaException;
- import org.im4java.core.IMOperation;
- import org.im4java.process.Pipe;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.jeeplus.modules.isp.service.impl.MongoFileServiceImp;
- /**
- * 图片处理工具<br>
- * 代码实现类将图片装换压缩成固定的大小格式的图片<br>
- * 使用工具为im4java+GraphicsMagick-1.3.24-Q8<br>
- * 参考: <a href="http://im4java.sourceforge.net/">im4java</a><br>
- * GraphicsMagick: <a href="ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/windows/">下载</a><br>
- *
- * @author xiaofei.xian
- * @version
- * 1.0, 2016年8月8日 下午2:53:20
- */
- public class GraphicsMagicUtil {
- private static Logger logger = LoggerFactory.getLogger(MongoFileServiceImp.class);
- private static String GRAPHICS_MAGICK_PATH;
- private static boolean IS_WINDOWS;
- /**
- * 缩放图片大小
- *
- * @throws IM4JavaException
- * @throws InterruptedException
- * @throws IOException
- * @return
- */
- public static OutputStream zoomPic(OutputStream os, InputStream is, String contentType, Integer width, Integer height)
- throws IOException, InterruptedException, IM4JavaException {
- IMOperation op = buildIMOperation(contentType, width, height);
- Pipe pipeIn = new Pipe(is, null);
- Pipe pipeOut = new Pipe(null, os);
- ConvertCmd cmd = new ConvertCmd(true);
- if (IS_WINDOWS) {
- // linux下不要设置此值,不然会报错
- cmd.setSearchPath(GRAPHICS_MAGICK_PATH);
- }
- cmd.setInputProvider(pipeIn);
- cmd.setOutputConsumer(pipeOut);
- cmd.run(op);
- return os;
- }
- /**
- * 压缩图片,返回输入流
- *
- * @param is
- * @param contentType
- * @param width
- * @param height
- * @return
- */
- public static InputStream convertThumbnailImage(InputStream is, String contentType, double width, double height) {
- try {
- IMOperation op = buildIMOperation(contentType, width, height);
- Pipe pipeIn = new Pipe(is, null);
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- Pipe pipeOut = new Pipe(null, os);
- ConvertCmd cmd = new ConvertCmd(true);
- if (IS_WINDOWS) {
- // linux下不要设置此值,不然会报错
- cmd.setSearchPath(GRAPHICS_MAGICK_PATH);
- }
- cmd.setInputProvider(pipeIn);
- cmd.setOutputConsumer(pipeOut);
- cmd.run(op);
- return new ByteArrayInputStream(os.toByteArray());
- } catch (Exception e) {
- if (logger.isInfoEnabled()) {
- logger.info("Failed to convert image {}", e.getMessage());
- }
- return null;
- }
- }
- /**
- * @param contentType
- * @param width
- * @param height
- * @return
- */
- private static IMOperation buildIMOperation(String contentType, Number width, Number height) {
- IMOperation op = new IMOperation();
- String widHeight = width + "x" + height;
- op.addImage("-"); // 命令:处输入流中读取图片
- op.addRawArgs("-scale", widHeight);// 按照给定比例缩放图片
- op.addRawArgs("-gravity", "center"); // 缩放参考位置 对图像进行定位
- op.addRawArgs("-extent", width + "x" + height); // 限制JPEG文件的最大尺寸
- op.addRawArgs("+profile", "*");// 去除Exif信息
- // 设置图片压缩格式
- op.addImage(contentType.substring(contentType.indexOf("/") + 1) + ":-");
- return op;
- }
- public static void setGraphicsMagickPath(String graphicsMagickPath) {
- GraphicsMagicUtil.GRAPHICS_MAGICK_PATH = graphicsMagickPath;
- IS_WINDOWS = SystemUtils.IS_OS_WINDOWS;
- }
- }
im4java+GraphicsMagick的更多相关文章
- app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印
在app的后台中,有时候为了标示版权,需要给图片加上水印. 在liunx中,IM4JAVA+GraphicsMagick是个高效处理图片的方案,图片的裁剪是使用了这个技术方案,为了减少不必要的开发成本 ...
- im4java+GraphicsMagick 的问题
1.convert.exe: non-conforming drawing primitive definition `' @ error/draw.c/RenderMVGContent/3901. ...
- graphicsMagick 文档
ImageMagick资料 ---------------------------------------------------------------------------- ImageMagi ...
- ImageMagick简介、GraphicsMagick、命令行使用示例
http://elf8848.iteye.com/blog/382528 ImageMagick资料 ------------------------------------------------- ...
- GraphicsMagick 号称图像处理领域的瑞士军刀
标签: librarydelegatesimage图像处理fontstiff 2012-09-13 10:15 2496人阅读 评论(0) 收藏 举报 分类: java技术(52) 简介 ...
- app后端设计--总目录 (转)
特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...
- ImageMagick资料
ImageMagick资料 ---------------------------------------------------------------------------- ImageMagi ...
- app后端设计--总目录
做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...
- 23.app后端如何架设文件系统
现在app展现内容的形式多种多样的,有文字,图片,声音,视频等等,其中文件占了一个很大的比重.随着app不断运营,文件会越来越多,占用的磁盘空间也不断增大,架设一套高效的文件系统,对于整个app架构有 ...
随机推荐
- mysql 如何用命令清除表数据,让表数据索引是从0开始呢?
truncate MYTABLE 这样就可以了 其实这个命令就相当于删除表再建 所有的数据都还原 可以使用工具来完成这个操作 右键单击要操作的表,选择Turncale Table 执行查询语句,数据就 ...
- 利用 CSS animation 和 CSS sprite 制作动画
CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...
- openstack——nova计算服务
一.nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是 ...
- sysbench测试阿里云CPU
参考 https://wiki.mikejung.biz/Benchmarking 买了一个1核的ECS,测试一下CPU性能 第一次是只用1个thread去跑 [root@iZwz9fy718twfi ...
- 利用WMITool解决浏览器快捷方式启动参数被篡改以及浏览器主页被劫持的问题
先说说症状 症状①:通过快捷方式启动浏览器,首页跳转到2345以及hao123网址导航页,切系统内安装的多款浏览器(IE.Chrome.Firefox.Opera.Safari.Maxthon)症状相 ...
- mysql登录出现1045错误
这个问题是在window server 2012上安装mysql之后, 远程访问时出现的1045错误 我新建了一个相同的用户用于远程访问, 密码也相同, 但是还是访问不了 参照链接:https://b ...
- Codeforces Round #427 (Div. 2)——ABCD
http://codeforces.com/contest/835 A.拼英语水平和手速的签到题 #include <bits/stdc++.h> using namespace std; ...
- route 详解
语法: [root@test root]# route [-nee] [root@test root]# route add [-net|-host]目标主机或网域[netmask] [gw|dev] ...
- Clojure:通过cursive连接远程REPL服务器
配置很简单,步骤如下:1. 选择Edit Configurations…2. 选择Clojure REPL -> Remote3. 输入远程服务器的ip和端口. 最后点运行就可 ...
- HTML5:防止页面在移动设备上缩放
在制作网页时,如果对移动设备有做兼容设计的话,通常是不希望页面在移动设备能够被缩放.这样可以防止原先设计好的样式被破坏.要做到这一点,只需要在网页的head部分加入如下语句即可: <!-- 屏蔽 ...