`
leo1211
  • 浏览: 141356 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jmagick 对图片处理

阅读更多
jmagick 对图片处理

package sun.image.jmagick;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.text.SimpleDateFormat;
import java.util.Date;

import magick.*;

public class ImageHandle {

static{   
        //不能漏掉这个,不然jmagick.jar的路径找不到  
         System.setProperty("jmagick.systemclassloader","no");   
     }   
       
    /**
      * 压缩图片
      * @param filePath 源文件路径
      * @param toPath    缩略图路径
      */   
    public static void createThumbnail(String filePath, String toPath) throws MagickException{   
         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;   
            if (wideth > height) {   
                 height = 660 * height / wideth;   
                 wideth = 660;   
             }    
             scaled = image.scaleImage(wideth, height);//小图片文件的大小.  
             scaled.setFileName(toPath);   
             scaled.writeImage(info);   
         }finally{   
            if(scaled != null){   
                 scaled.destroyImages();   
             }   
         }     
     }   
       
    /**
      * 水印(图片logo)
      * @param filePath   源文件路径
      * @param toImg      修改图路径
      * @param logoPath   logo图路径
      * @throws MagickException
      */   
    public static void initLogoImg(String filePath, String toImg, String logoPath) throws MagickException {   
         ImageInfo info = new ImageInfo();   
         MagickImage fImage = null;   
         MagickImage sImage = null;   
         MagickImage fLogo = null;   
         MagickImage sLogo = null;   
         Dimension imageDim = null;   
         Dimension logoDim = null;   
        try {   
             fImage = new MagickImage(new ImageInfo(filePath));   
             imageDim = fImage.getDimension();   
            int width = imageDim.width;   
            int height = imageDim.height;   
            if (width > 660) {   
                 height = 660 * height / width;   
                 width = 660;   
             }   
             sImage = fImage.scaleImage(width, height);   
               
             fLogo = new MagickImage(new ImageInfo(logoPath));   
             logoDim = fLogo.getDimension();   
            int lw = width / 8;   
            int lh = logoDim.height * lw / logoDim.width;   
             sLogo = fLogo.scaleImage(lw, lh);   
   
             sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo,   width-(lw + lh/10), height-(lh + lh/10));   
             sImage.setFileName(toImg);   
             sImage.writeImage(info);   
         } finally {   
            if(sImage != null){   
                 sImage.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 imgPath 原图片路径
    * @param toPath 缩放后的图片路径
    * @param w   缩放后图片宽度
    * @param h   缩放后图片高度
    */
  
   public static void zoomImg(String imgPath, String toPath, int w, int h) throws Exception{
    ImageInfo info = new ImageInfo(imgPath);
    MagickImage image = new MagickImage(info);
    MagickImage scaleImg = image.scaleImage(w, h);
    scaleImg.setFileName(toPath);
    scaleImg.writeImage(info);
   }
  
   /**
    * 水印(文字)
       * @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();   
   }   
     

   


public static void main(String[] args) throws Exception{
   String imgPath = "C:\\images\\bg.jpg";
   String toPath = "C:\\images\\bg1.jpg";
   ImageHandle.cutImg(imgPath, toPath, 200, 200, 50, 200);
   toPath = "C:\\images\\bg2.jpg";
   ImageHandle.zoomImg(imgPath, toPath, 400, 300);
  
   toPath = "C:\\images\\bg3.jpg";
   String text = "我是孙新";
   ImageHandle.initTextToImg(imgPath, toPath, text);
}

}

分享到:
评论
1 楼 cooper 2009-02-22  
截图的时候,如果是jpg就没有问题,如果是gif,不能改变背景尺寸。希望能指点一下,谢谢!

相关推荐

    JMagick图片处理

    **JMagick图片处理**是图像操作的重要工具,它是一个Java接口,用于ImageMagick库,使得在Java环境中可以方便地进行图像处理。这个技术涵盖了多个关键知识点,包括创建缩略图、添加水印、切图以及压缩图片,这些都是...

    jmagick图片处理

    jmagick处理图片,图片高质量压缩,图片加水印。

    Jmagick缩图 JAVA图片处理

    本文将深入探讨“Jmagick缩图”这一主题,它是一种基于Java的图片处理工具,用于快速有效地生成图片的缩略图。 JMagick是ImageMagick的一个Java接口,ImageMagick是一个强大的跨平台图像处理库。它允许Java开发者...

    Jmagick32位的和Jmagick64位的Jmagick.dll,Jmagick.jar

    在Java应用程序中,Jmagick通过Jmagick.dll动态链接库和Jmagick.jar文件提供对底层C++接口的访问。本文将深入探讨Jmagick的32位和64位版本,以及它们在不同环境下的应用。 1. **Jmagick的32位与64位** Jmagick的...

    jmagick 例子

    《JMagick:Java 图像处理的利器与内存管理策略》 在计算机视觉和Web开发领域,图像处理是一项至关重要的任务。Java作为一种广泛使用的编程语言,提供了多种图像处理库,其中JMagick是一个非常实用的工具,它为Java...

    高质量图片处理Jmagick

    文件包含:ImageMagick-6.4.5-3-Q16-windows-dll.exe,jmagick.dll,jmagick.jar,压缩包中的版本统一,安装ImageMagick,复制ImageMagick安装目录的所有.dll文件和Jmagick.dll到,系统的system32下 即可使用,System.set...

    jmagick-win-6.3.9

    - 图像处理服务:在服务器端,JMagick可以作为后台服务,对用户上传的图片进行自动化处理,如生成缩略图、调整尺寸、添加水印等。 - 数据可视化:在数据科学领域,JMagick可以帮助将复杂的数据转换成可视化的图像,...

    jmagick-win-5.5.7-Q8.zip

    在实际应用中,JMagick可以用于各种场景,如网站的图像上传处理、图片格式转换、图片质量优化等。例如,一个常见的应用场景是用户上传一张大尺寸的照片,服务器端可以通过JMagick进行自动缩放,减少存储空间并加快...

    JMagick-5.5.6-0.tar.gz

    《JMagick-5.5.6-0:Java Web中的图形处理利器》 在Java Web开发中,图像处理是一项不可或缺的功能,无论是用于网站设计、数据...无论是创建美观的网页,还是处理用户上传的图片,JMagick都能成为开发者得力的助手。

    java高清处理图片

    在实际项目开发中,图片处理是一项常见的需求,包括但不限于图片的压缩、尺寸调整以及添加水印等操作。传统的Java库虽然能够实现这些功能,但往往在图片质量方面不尽如人意,尤其是当图片尺寸被大幅度压缩时,画质...

    ImageMagick-6.3.9+jmagick组合

    ImageMagick是一款强大的开源...这在开发基于Java的图像处理应用时尤其有用,例如在线图片编辑服务、自动化图像处理脚本等。通过这个组合,开发者可以高效地处理和转换图像,同时享受Java带来的便捷性和跨平台优势。

    Jmagick圖片處理

    ### Jmagick 图片处理知识点 #### 一、概述 Jmagick 是一个 Java 接口,用于 ImageMagick 图形库,它提供了一系列强大的功能,包括图片缩放、翻转、添加水印等复杂的图形处理操作。这些功能在很多应用中都非常有用...

    rt java图片处理jar包

    4. **第三方库**: 虽然Java标准库提供了基础的图片处理能力,但有时第三方库如Apache Commons Imaging(以前称为Sanselan)、ImageMagick的Java绑定(如JMagick或Im4Java)或FastImageIO等能提供更强大、更高效的...

    linux下安装ImageMagick-6.5+JMagick -6.4 经测试成功的

    ImageMagick 是一个功能很强的图片处理程序。可应用在多种操作系统平台上。 安装ImageMagick和JMagick 如果安装了老版本ImageMagick的rpm包,请先删除 安装环境要求: 确认已经安装了zlib、freetype、libpng和jpeg-...

    java图片、文件处理

    首先,**图片处理**是Java开发中的一个重要部分,主要涉及以下几个核心概念: 1. **Java AWT 和 Swing 图形库**:Java提供了丰富的API来处理图形,包括AWT(Abstract Window Toolkit)和Swing。这两个库允许开发者...

    java 水印(水印适应图片大小,但个别图片太小不支持)

    在Java编程中,添加水印是一项常见的图像处理任务,它涉及到图像处理库的使用和算法设计。...在实际应用中,还需要考虑性能优化,如批量处理大量图片时的并行化处理,以及对不同格式图像的支持等。

    java web 图片压缩

    在Java Web开发中,图片处理是一项常见的需求,无论是用于网站展示、用户上传的头像处理,还是电商系统中的商品图片优化。本项目专注于图片的压缩功能,提供了简单易用的API,可以对图片进行缩放和降质处理,并且...

    ImageMagick使用手册

    在使用JMagick进行图片处理时,例如生成缩略图,可以按照以下Java代码进行操作: ```java System.setProperty("jmagick.systemclassloader", "no"); // 创建ImageInfo对象,用于存储图片信息 ImageInfo info = new...

    java各种方式压缩图片

    虽然Guava库本身不直接支持图片处理,但可以借助它来读写文件,并与其他库结合使用。 5. **利用OpenCV库** OpenCV是一个专门用于计算机视觉的开源库,也可以用于图片处理。虽然它的主要目的是计算机视觉任务,但...

    java 上传图片配置

    这个配置文档主要涵盖了如何在Java环境中配置和使用相关工具来处理图片上传的过程。首先,我们来深入理解涉及的关键知识点。 1. **Servlet与Multipart解析器**: 图片上传通常通过HTTP POST请求完成,其中包含...

Global site tag (gtag.js) - Google Analytics