`

java图片处理(二)

    博客分类:
  • java
阅读更多

1 多张jpg图合成gif动画

 

/**      * 把多张jpg图片合成一张      * @param pic String[] 多个jpg文件名 包含路径      * @param newPic String 生成的gif文件名 包含路径      */     private synchronized void jpgToGif(String pic[], String newPic) {         try {             AnimatedGifEncoder e = new AnimatedGifEncoder();  //网上可以找到此类             e.setRepeat(0);             e.start(newPic);             BufferedImage src[] = new BufferedImage[pic.length];             for (int i = 0; i < src.length; i++) {                 e.setDelay(200); //设置播放的延迟时间                 src[i] = ImageIO.read(new File(pic[i])); // 读入需要播放的jpg文件                 e.addFrame(src[i]);  //添加到帧中             }             e.finish();         } catch (Exception e) {             System.out.println( "jpgToGif Failed:");             e.printStackTrace();         }     }

 

2 gif动画分解成多张jpg

 

/**      * 把gif图片按帧拆分成jpg图片               * @param gifName String 小gif图片(路径+名称)      * @param path String 生成小jpg图片的路径      * @return String[] 返回生成小jpg图片的名称      */     private synchronized String[] splitGif(String gifName,String path) {         try {             GifDecoder decoder = new GifDecoder();             decoder.read(gifName);             int n = decoder.getFrameCount(); //得到frame的个数             String[] subPic = new String[n];             String tag = this.getTag();             for (int i = 0; i < n; i++) {                 BufferedImage frame = decoder.getFrame(i); //得到帧                 //int delay = decoder.getDelay(i); //得到延迟时间                 //生成小的JPG文件                 subPic[i] = path + String.value(i)+ ".jpg";                 FileOutputStream out = new FileOutputStream(subPic[i]);                 ImageIO.write(frame, "jpeg", out);                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);                   encoder.encode(frame); //存盘                 out.flush();                 out.close();             }             return subPic;         } catch (Exception e) {             System.out.println( "splitGif Failed!");             e.printStackTrace();             return null;         }

 

3 根据提供的文字生成jpg图片

 

/**      * 根据提供的文字生成jpg图片      * @param s String  文字      * @param smallWidth int  每个字的宽度和高度是一样的      * @param bgcolor Color  背景色      * @param fontcolor Color  字色      * @param fontPath String 字体文件      * @param jpgname String jpg图片名      * @return      */     private String createJpgByFont(String s, int smallWidth,Color bgcolor,Color fontcolor,String fontPath,String jpgname) {         try {                                                                                  //宽度                               高度             BufferedImage bimage = new BufferedImage(s.length()*smallWidth,                                                          smallWidth,BufferedImage.TYPE_INT_RGB);             Graphics2D g = bimage.createGraphics();             g.setColor(bgcolor); //背景色             g.fillRect(0, 0, smallWidth, smallWidth); //画一个矩形             g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); //去除锯齿(当设置的字体过大的时候,会出现锯齿)             g.setColor(fontcolor); //字的颜色             File file = new File(fontPath);  //字体文件             Font font = Font.createFont(Font.TRUETYPE_FONT, file); //根据字体文件所在位置,创建新的字体对象(此语句在jdk1.5下面才支持)               g.setFont(font.deriveFont((float) smallWidth));   //font.deriveFont(float f)复制当前 Font 对象并应用新设置字体的大小             g.drawString(s,0, smallWidth); //在指定坐标除添加文字             g.dispose();             FileOutputStream out = new FileOutputStream(jpgname); //指定输出文件             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);             JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);             param.setQuality(50f, true);             encoder.encode(bimage, param); //存盘             out.flush();             out.close();         } catch (Exception e) {             System.out.println( "createJpgByFont Failed!");             e.printStackTrace();         }     }

 

4 多张jpg图合成一张大JPG图,在这里对大图只作宽度限制,不做高度限制 

 

/**      * 将多个小图片合成一张大jpg图  (小的jpg图片按照行列顺序平铺)      * @param smallJPG ArrayList 一组小的jpg图片      * @param bigWidth int 大图宽度      * @param smallWidth int  单个文字生成的小图的宽度和高度是一致的      * @return       */     private void createBigJPG(ArrayList smallJPG, int bigWidth,                                 int smallHeigh,Color bgColor ,String picName) {         try {             if (bigWidth < smallWidth) //如果大图片的高度比小图片的高度还小 直接返回                 return;             int colCount = bigWidth / smallWidth; //每行放置的字数             int leftMargin = (int) ((bigWidth - colCount * smallWidth) / 2f); //左边距             int rowCount = smallJPG.size();  //小图行数              int setWidth = bigWidth; //每列中间不留空隙,只留左右边距             int setHeight = smallWidth * rowCount ;              //按照大图片宽高绘制一个背景图片             BufferedImage bufImage = new BufferedImage(setWidth, setHeight,                     BufferedImage.TYPE_INT_RGB);             Graphics2D g = bufImage.createGraphics();             g.setColor(bgColor); //背景的颜色             g.fillRect(0, 0, setWidth, setHeight);             int y = 0; //纵坐标             for (int i = 0; i < rowCount; i++) { //遍历每行                 ArrayList col = (ArrayList) (smallJPG.get(i));                 int x = leftMargin; //横坐标  可能会出现左边距                 for (int j = 0; j < col.size(); j++) {                     String jpgname = (String) (col.get(j));                     ImageIcon icon = new ImageIcon(jpgname);                     Image img = icon.getImage();                     int imgWidth = img.getHeight(null);                     g.drawImage(img, x, y, null);                     x += imgWidth;                 }                 y += (smallWidth);               }             g.dispose();             FileOutputStream out = new FileOutputStream(picName);  //指定输出文件             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  //设置文件格式             JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufImage); //从图片缓冲中读取             param.setQuality(50f, true);             encoder.encode(bufImage, param); //存盘             out.flush();             out.close();         } catch (Exception e) {             System.out.println( "createBigJPG Failed!");             e.printStackTrace();             }     }

  注:

(1)AnimatedGifEncoder和GifDecoder,以及这两个类涉及到的相关类,在网上搜索一下就可以找到。

(2)在linux系统下,如果你想支持更多系统外的字体,使用下面两句话,可以不用为系统添加字体,直接把字体文件拷贝到相应位置即可,但是需要jdk1.5环境。
File file = new File(fontPath); //字体文件
Font font = Font.createFont(Font.TRUETYPE_FONT, file); //根据字体文件所在位置,创建新的字体对象
如果是jdk1.5以下版本则需要为系统添加字体,因为createFont(int fontFormat, File fontFile)
这个方法,是从1.5才开始有的。

(3)g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
我在测试中发现,当设置的字体过大的时候,会出现很明星的锯齿,后来在网上找到了这个解决方法。

(4)有了以上几个方法,就可以做出更好看的闪信了。我也是因为需求才写下这些方法的,美工做了一些热门词汇的gif图片,在短信转彩信遇到这些词汇时,要使用提供的图片替换文字。

分享到:
评论

相关推荐

    java 图片处理工具类 java 图片处理工具类

    java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...

    Java图片处理类库SimpleImage.zip

    SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...

    java高清处理图片

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

    Java图片处理工具ImageMagick

    Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...

    java 图片处理源码

    这是一个Java图片处理程序。 Java 开源代码,高手学习 java 图片处理源码

    Java图片处理技术

    在Java编程语言中,处理...综上所述,这段代码展示了Java如何利用AWT库进行图片处理,包括添加图片和文字水印,以及处理透明度和定位。这些都是Java图形处理的基本技术,对于开发涉及图像编辑和处理的应用非常有用。

    Java图像处理类库 Java Image Filters

    Java图像处理类库,如Java Image Filters,是Java平台上的一个重要工具,用于对数字图像进行各种操作和修改。这些类库通常包含了一系列的类和方法,可以实现图像的过滤、调整、裁剪、旋转、合成等多种功能,为开发者...

    java图片处理

    文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。

    java处理图片背景颜色的方法

    在标签中,作者列出了四个关键词:“java 处理图片背景颜色”、“java 图片背景颜色替换”、“java 图片背景颜色更改”、“java 蓝底寸照批量转换为白底”,这些关键词都与 Java 处理图片背景颜色相关。 在部分内容...

    java图片处理工具类JAR包 java-image-scalingjar

    java图片处理工具类JAR包 java-image-scalingjar

    java图片缩放 java缩略图 缩略图 java图片处理

    java图片缩放 java缩略图 缩略图 java图片处理

    java图片压缩处理

    java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理

    java处理上传后的图片

    #### 二、Java图像处理库简介 Java提供了丰富的图像处理库,其中最常用的是`java.awt`和`javax.imageio`包下的类。这些类能够帮助开发者轻松地实现图片的读取、写入、缩放等功能。特别是`ImageIO`类,它支持多种图片...

    java图片处理类

    这是一个java生成随即图片验证码,java图片压缩,java图片水印 ,java图片裁剪 ,java图片旋转 ,java图片放大缩小等工具类,里面有测试方法,欢迎使用!

    java图片处理 根据大小获取指定大小图片

    java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小...

    java图片处理工具类

    在Java编程语言中,处理图片是一项常见的任务,尤其在网页开发、移动应用或者图形用户界面设计中。本篇文章将深入探讨如何使用Java...通过深入理解这些技术,我们可以创建出强大的图片处理工具类,满足日常开发需求。

    java 图像处理(模糊处理、锐化处理)

    在Java编程语言中,图像处理是一项重要的功能,可以用于创建、编辑或操作图像。本教程将探讨两个关键的图像处理技术:模糊处理和锐化处理。这些技术在图像分析、图像增强以及艺术创作中有着广泛的应用。 模糊处理是...

    java处理图片大小等比例缩放,自定义修改图片大小,截取,水印

    在压缩包中的"java图片大小转换"文件中,很可能包含了实现这些功能的示例代码和使用说明,可以参考学习以加深理解。在实际开发中,我们还可以借助第三方库如`ImageMagick`、`Java Advanced Imaging (JAI)`或`JavaFX`...

    java 图片处理类

    在Java编程领域,图片处理是一项常见的任务,尤其是在网站开发、移动应用或者数据分析中。这个"java 图片处理类"提供了一种便捷的方式,用于给图片添加水印以及压缩图片,这是开发过程中非常实用的功能。下面将详细...

Global site tag (gtag.js) - Google Analytics