im4java+GraphicsMagick

本贴最后更新于 2461 天前,其中的信息可能已经水流花落
`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;`

`/**`

`* 图片处理工具`

`* 代码实现类将图片装换压缩成固定的大小格式的图片`

`* 使用工具为im4java+GraphicsMagick-1.3.24-Q8`

`* 参考: im4java`

`* GraphicsMagick: 下载`

`*`

`* @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;`

`}`

`}`
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    27 引用 • 66 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 48 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    397 引用 • 3418 回帖 • 1 关注
  • abitmean

    有点意思就行了

    24 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 2 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 463 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 22 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    20 引用 • 74 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖 • 2 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 2 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 179 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 454 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 547 关注
  • 自由行
    3 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 125 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    3 引用 • 83 回帖 • 2 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    478 引用 • 902 回帖 • 1 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4581 回帖 • 692 关注
  • 音乐

    你听到信仰的声音了么?

    59 引用 • 509 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 509 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 687 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 3 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 693 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 353 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注