- 浏览: 135303 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xinglianxlxl:
看看,不确定用了吗
url参数和map之间的转换 -
ijlkdwg:
没有看到 jar 包在哪 ?
java获取5日天气预报(json数据) -
BUYAOZAIBEIDAOLE:
查询一下就找到了,拿走试下,谢谢LZ
反射工具类 -
w1106093687:
引用试试什么效果
java bean反射 获取get set方法(Method) -
moxin0703:
哪有Utils包啊?
java获取5日天气预报(json数据)
在项目中需要对图片处理(缩小、加水印),一开始用的程序虽然可以解决问题但是缩小后的效果实在是太差了,和PS处理出来的效果差远了,后来找到一种专门处理图片的插件,效果很好,以下是安装过程和代码。
1.首先下载 根据缩略图要求品质的不同下载,进行安装
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe
2. 考jmagick.dll 到上面的安装目录
3.将jmagick.jar放在你的%JAVA_HOME%\jre\lib\ext
现在web应用经常会用到缩略图。然后一旦生成的缩略图小于100px * 100px,一些常用的java包,生成的图片确实有点惨不忍睹。
现在介绍使用Jmagick的使用,可以生成质量很好的缩略图,当然还有其他很多图像处理的方法。
首先jmagick(http://www.yeo.id.au/jmagick/)是ImageMagick(http://www.imagemagick.org/)的java 应用的接口。所以要先安装ImageMagick应用程序,你的java应用才能使用,在主页上你可以轻松找到下载的链接。
1。下载jmagick,imagemagick
2.安装ImageMagick,网站上有安装方法(windows,unnix),我只在win上做了安装,安装以后把安装目录下所有的dll文件copy到windows/system32/目录下。
3。下载的jmagick包含jmagick.jar,jmagick.dll文件,jmagick.dll需要copy到windows/system32/目录下。
4。web应用如果部署到tomcat下,那么最好在catalina.bat文件中改变如下设置
set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}\conf\logging.properties"
避免heap溢出的问题,参数看你自己的机器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )
5。还要注意如果部署到web应用,你在使用的class里面需要
System.setProperty("jmagick.systemclassloader","no");
要不然会报出UnsatisfiedLinkError: no JMagick in java.library.path.
1.首先下载 根据缩略图要求品质的不同下载,进行安装
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe
2. 考jmagick.dll 到上面的安装目录
3.将jmagick.jar放在你的%JAVA_HOME%\jre\lib\ext
现在web应用经常会用到缩略图。然后一旦生成的缩略图小于100px * 100px,一些常用的java包,生成的图片确实有点惨不忍睹。
现在介绍使用Jmagick的使用,可以生成质量很好的缩略图,当然还有其他很多图像处理的方法。
首先jmagick(http://www.yeo.id.au/jmagick/)是ImageMagick(http://www.imagemagick.org/)的java 应用的接口。所以要先安装ImageMagick应用程序,你的java应用才能使用,在主页上你可以轻松找到下载的链接。
1。下载jmagick,imagemagick
2.安装ImageMagick,网站上有安装方法(windows,unnix),我只在win上做了安装,安装以后把安装目录下所有的dll文件copy到windows/system32/目录下。
3。下载的jmagick包含jmagick.jar,jmagick.dll文件,jmagick.dll需要copy到windows/system32/目录下。
4。web应用如果部署到tomcat下,那么最好在catalina.bat文件中改变如下设置
set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}\conf\logging.properties"
避免heap溢出的问题,参数看你自己的机器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )
5。还要注意如果部署到web应用,你在使用的class里面需要
System.setProperty("jmagick.systemclassloader","no");
要不然会报出UnsatisfiedLinkError: no JMagick in java.library.path.
import java.awt.Dimension; import java.awt.Rectangle; import java.text.SimpleDateFormat; import java.util.Date; import magick.CompositeOperator; import magick.CompressionType; import magick.DrawInfo; import magick.ImageInfo; import magick.MagickException; import magick.MagickImage; import magick.PixelPacket; import magick.PreviewType; public class ImageUtils2 { static { // 不能漏掉这个,不然jmagick.jar的路径找不到 System.setProperty("jmagick.systemclassloader", "no"); } /** * @param width 原图片的宽 * @param height 原图片的高 * @return */ private static int[] getWidthHeight(int width, int height, int maxValue) { int nWidth = 0; int nHeight = 0; if (width < height) { nWidth = width * maxValue / height; nHeight = maxValue; } else if (width > height) { nHeight = height * maxValue / width; nWidth = maxValue; } else { nWidth = width * maxValue / height; nHeight = height * maxValue / width; } return new int[] { nWidth, nHeight }; } /** * 压缩图片 * * @param filePath 源文件路径 * @param toPath 缩略图路径 */ public static void createImage(String filePath, String toPath, int maxValue) { ImageInfo info = null; MagickImage image = null; Dimension imageDim = null; MagickImage scaled = null; try { info = new ImageInfo(filePath); image = new MagickImage(info); imageDim = image.getDimension(); int wideth = imageDim.width; int height = imageDim.height; int[] wh = getWidthHeight(wideth, height, maxValue); wideth = wh[0]; height = wh[1]; scaled = image.scaleImage(wideth, height);// 小图片文件的大小. scaled.setFileName(toPath); scaled.writeImage(info); } catch (Exception e) { e.printStackTrace(); } finally { if (scaled != null) { scaled.destroyImages(); } } } /** * 大图片是否处理 * * @param path * @return */ public static boolean isUpdateBigPic(String path) { Dimension imageDim = null; MagickImage image = null; ImageInfo info = null; try { info = new ImageInfo(path); image = new MagickImage(info); imageDim = image.getDimension(); if (imageDim.width > Constants.BPHOTO || imageDim.height > Constants.BPHOTO) { return true; } } catch (Exception e) { e.printStackTrace(); } return false; } public static void main(String[] args) { initShuiToImage2("D:\\test\\sss.jpg", "D:\\test\\sshui.png", 550); // System.out.println(isUpdateBigPic("D:\\test\\11.jpg")); } /** * 商品水印 * * @param filePath 待加水印图片 * @param shuiPath 水印图片 * @throws MagickException */ public static void initShuiToImage(String filePath, String shuiPath, int maxValue) { ImageInfo info = null; MagickImage fImage = null; MagickImage sImage = null; MagickImage fLogo = null; MagickImage sLogo = null; Dimension imageDim = null; Dimension logoDim = null; try { info = new ImageInfo(); fImage = new MagickImage(new ImageInfo(filePath)); imageDim = fImage.getDimension(); int width = imageDim.width; int height = imageDim.height; int[] wh = getWidthHeight(width, height, maxValue); width = wh[0]; height = wh[1]; sImage = fImage.scaleImage(width, height); fLogo = new MagickImage(new ImageInfo(shuiPath)); logoDim = fLogo.getDimension(); int lw = logoDim.width; int lh = logoDim.height; sLogo = fLogo.scaleImage(lw, lh); // 水印的位置,宽居中,高于底部5px sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo, (width - lw) / 2, (height - lh) - 5); sImage.setFileName(filePath); sImage.writeImage(info); } catch (Exception e) { e.printStackTrace(); } finally { if (sImage != null) { sImage.destroyImages(); } } } /** * 赠品水印 * * @param filePath * @param shuiPath * @param maxValue */ public static void initShuiToImage2(String filePath, String shuiPath, int maxValue) { ImageInfo info = null; MagickImage fImage = null; MagickImage sImage = null; MagickImage fLogo = null; MagickImage sLogo = null; Dimension imageDim = null; Dimension logoDim = null; try { info = new ImageInfo(); fImage = new MagickImage(new ImageInfo(filePath)); imageDim = fImage.getDimension(); int width = imageDim.width; int height = imageDim.height; int[] wh = getWidthHeight(width, height, maxValue); width = wh[0]; height = wh[1]; sImage = fImage.scaleImage(width, height); fLogo = new MagickImage(new ImageInfo(shuiPath)); logoDim = fLogo.getDimension(); int lw = logoDim.width; int lh = logoDim.height; sLogo = fLogo.scaleImage(lw, lh); // 水印的位置,宽居中,高于底部 sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo, 0, 0); sImage.setFileName(filePath); sImage.writeImage(info); } catch (Exception e) { e.printStackTrace(); } finally { if (sImage != null) { sImage.destroyImages(); } } } /** * 水印(文字) * * @param filePath 源文件路径 * @param toImg 修改图路径 * @param text 名字(文字内容自己随意) * @throws MagickException */ public static void initTextToImg(String filePath, String toImg, String text) throws MagickException { ImageInfo info = new ImageInfo(filePath); if (filePath.toUpperCase().endsWith("JPG") || filePath.toUpperCase().endsWith("JPEG")) { info.setCompression(CompressionType.JPEGCompression); // 压缩类别为JPEG格式 info.setPreviewType(PreviewType.JPEGPreview); // 预览格式为JPEG格式 info.setQuality(95); } MagickImage aImage = new MagickImage(info); Dimension imageDim = aImage.getDimension(); int wideth = imageDim.width; int height = imageDim.height; if (wideth > 660) { height = 660 * height / wideth; wideth = 660; } int a = 0; int b = 0; String[] as = text.split(""); for (String string : as) { if (string.matches("[\u4E00-\u9FA5]")) { a++; } if (string.matches("[a-zA-Z0-9]")) { b++; } } int tl = a * 12 + b * 6 + 300; MagickImage scaled = aImage.scaleImage(wideth, height); if (wideth > tl && height > 5) { DrawInfo aInfo = new DrawInfo(info); aInfo.setFill(PixelPacket.queryColorDatabase("white")); aInfo.setUnderColor(new PixelPacket(0, 0, 0, 100)); aInfo.setPointsize(12); // 解决中文乱码问题,自己可以去随意定义个自己喜欢字体,我在这用的微软雅黑 String fontPath = "C:/WINDOWS/Fonts/MSYH.TTF"; // String fontPath = "/usr/maindata/MSYH.TTF"; aInfo.setFont(fontPath); aInfo.setTextAntialias(true); aInfo.setOpacity(0); aInfo.setText(" " + text + "于 " + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " 上传于XXXX网,版权归作者所有!"); aInfo.setGeometry("+" + (wideth - tl) + "+" + (height - 5)); scaled.annotateImage(aInfo); } scaled.setFileName(toImg); scaled.writeImage(info); scaled.destroyImages(); } /** * 切图 * * @param imgPath 源图路径 * @param toPath 修改图路径 * @param w * @param h * @param x * @param y * @throws MagickException */ public static void cutImg(String imgPath, String toPath, int w, int h, int x, int y) throws MagickException { ImageInfo infoS = null; MagickImage image = null; MagickImage cropped = null; Rectangle rect = null; try { infoS = new ImageInfo(imgPath); image = new MagickImage(infoS); rect = new Rectangle(x, y, w, h); cropped = image.cropImage(rect); cropped.setFileName(toPath); cropped.writeImage(infoS); } finally { if (cropped != null) { cropped.destroyImages(); } } } /** * 图片翻转 * * @param filePath * @param jaodu * @throws MagickException */ public static void createFanImg(String filePath, Double jaodu) throws MagickException { ImageInfo info = null; MagickImage image = null; try { info = new ImageInfo(filePath); image = new MagickImage(info); MagickImage rotated = image.rotateImage(jaodu); rotated.setFileName(filePath); rotated.writeImage(info); } finally { if (image != null) { image.destroyImages(); } } } }
发表评论
-
Tomcat 启动不了问题
2010-09-07 16:54 889把jre里的msvcr71.dll文件拷贝到C:\window ... -
Properties类小结
2010-09-06 16:20 865目前有个任务,要用到java.util.Properties类 ... -
lucene 创建索引
2010-09-01 14:48 1058@Retention(RetentionPolicy.RU ... -
反射工具类
2010-09-01 11:22 1477import java.lang.reflect.Fie ... -
url参数和map之间的转换
2010-09-01 11:10 9226/** * 将url参数转换成map * @ ... -
使用jackson解析json数据时获取多级节点的值,递归实现
2010-09-01 11:08 5896/** * 解析jsonNode的值 * @ ... -
将javabean转换成Map
2010-09-01 11:06 1797public static Map<String, ... -
httpclient4 ThreadSafeClientConnManager 多线程程执行HTTP请求的例子
2010-08-27 13:49 7271package cn.lake.util; import ... -
CalendarUtil
2010-08-19 15:35 979package com.test; import ... -
java 中对象属性和数据库中字段名的转换
2010-08-18 18:18 5461在开发过程中数据中的字段的命名一般是这样的:user_name ... -
使用HttpClient4 和jsoup下载Google 1998年到2010年的logo(原创)
2010-08-14 21:52 1165我个人比较喜欢Google的logo,感觉设计的很好,以前都是 ... -
GoogleLogoUtil
2010-08-13 13:05 790package com.test; import ... -
HttpClient4 实现文件下载
2010-08-12 18:19 3067HttpClient4 实现文件下载,依赖commons-io ... -
java httpClient4.0 通过代理认证访问网站
2010-08-11 10:09 2932httpClient4.0 通过代理认证访问网站 imp ... -
httpclient 获取到网页内容自动判断内容编码
2010-08-08 16:25 6517在“导航189”网站中编 ... -
java 生成32位UUID
2010-07-27 18:53 2567java 生成32位UUID,需要apache的2个jar(c ... -
java bean反射 获取get set方法(Method)
2010-07-27 18:44 9437/** * java反射bean的get方法 ... -
java 半角与全角转换
2010-07-27 18:41 936/** * 半角转全角 * ... -
使用jackson解析json数据
2010-07-27 14:15 3091import java.util.Iterator; ... -
java人民币小写转换大写
2010-07-13 09:47 1645/** * <p>Title: Money& ...
相关推荐
### Java高清处理图片:利用ImageMagick提升图片质量和效率 #### 背景与需求 在实际项目开发中,图片处理是一项常见的需求,包括但不限于图片的压缩、尺寸调整以及添加水印等操作。传统的Java库虽然能够实现这些...
Java图像处理类库,如Java Image Filters,是Java平台上的一个重要工具,用于对数字图像进行各种操作和修改。这些类库通常包含了一系列的类和方法,可以实现图像的过滤、调整、裁剪、旋转、合成等多种功能,为开发者...
在Java编程环境中,数字图像处理是一项重要的技术,广泛应用于图像分析、识别、增强等领域。"JAVA基本数字图像处理"这个项目旨在通过Java语言实现一系列基本的图像操作,以帮助开发者理解图像处理的基本原理并掌握其...
在Java编程语言中,图像处理是一项重要的功能,可以用于创建、编辑或操作图像。本教程将探讨两个关键的图像处理技术:模糊处理和锐化处理。这些技术在图像分析、图像增强以及艺术创作中有着广泛的应用。 模糊处理是...
java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...
《数字图像处理:JAVA语言实现》是一门涵盖了图像处理理论与实践的教程,它通过JAVA编程语言来讲解和实现各种图像处理技术。本教程旨在帮助学习者深入理解图像处理的基本概念,掌握用JAVA进行图像处理的方法,并能...
在Java编程语言中,处理PNG图像的透明度是一项常见的任务,尤其在创建用户界面或进行图形设计时。PNG格式支持alpha通道,这使得它能够表示不同程度的透明度,即所谓的“半透明”。以下是一些关于如何在Java中处理PNG...
基于 Java 平台的图像处理软件的设计与实现 本资源旨在设计和实现基于 Java 平台的图像处理软件,该软件能够实现基本的图像处理功能,如图像的放大、缩小、锐化等。该软件的设计基于 Java 语言,充分发挥了 Java ...
SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...
在IT行业中,数字图像处理是一项重要的技术,尤其是在Java Web开发领域。这个主题涵盖了广泛的理论和技术,包括图像的获取、分析、编辑以及在Web应用程序中的显示。以下是对"JAVA-web数字图像处理基础"这一主题的...
Java图像处理主要涉及Java Advanced Imaging (JAI) API和Java Image I/O (JIO) API。JAI API是Sun Microsystems开发的一个高级图像处理工具,它作为Java Media Framework的一部分,为Java 2D API提供了扩展,专门...
Java 处理图片背景颜色的方法 Java 处理图片背景颜色的方法是指利用 Java 语言来处理图片的背景颜色,例如将蓝底寸照批量转换为白底。这种方法可以批量处理大量图片,具有很高的实用价值。 title 中的“Java 处理...
Java 图像处理 Java 图像处理是使用 Java 语言对图像进行处理和操作的技术。该技术广泛应用于图像编辑、图像识别、计算机视觉等领域。 在 Java 中,对图像的处理可以通过使用 Java 2D API、Java Advanced Imaging...
示例代码展示了如何使用Java的图像处理库来对图像进行灰度化处理。在代码中,我们使用javax.imageio.ImageIO类加载输入图像文件,并创建一个与输入图像具有相同尺寸和类型的输出图像。然后,我们遍历输入图像的每个...
在Java编程语言中,对图片进行高级处理包括各种图像操作,如渐变、锐化和边缘检测等。这些技术在图像处理和计算机视觉领域中至关重要,可以用于改善图像质量、识别图像特征或创建视觉效果。以下是对这些概念的详细...
### Java处理上传后的图片知识点详解 #### 一、图片上传及处理概述 在现代Web应用中,用户上传图片的功能十分常见。为了优化用户体验并减轻服务器存储压力,通常会在图片上传后进行一系列处理,如压缩、缩放等。...
在本项目中,我们主要探讨的是一个基于Java语言的图像处理技术,用于实现对国内车牌号码的自动识别系统。这个源码库提供了完整的程序代码,旨在帮助开发者理解并实现车牌识别的核心算法。以下是对该技术及其相关知识...
Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...
使用Java处理TIFF文件可能需要如JAI或TwelveMonkeys ImageIO这样的库。 总之,这个项目提供了一个全面的图像处理解决方案,涵盖了从基本的图像操作到高级的图像处理技术,并确保了代码的质量和功能的完整性。无论是...