当前位置:编程学习 > JAVA >>

Thumbnailator实现图片压缩,旋转,添加水印

先看一下效果图吧:

 

主要的代码如下:

[java] 
package sea; 
 
import net.coobird.thumbnailator.Thumbnails; 
import net.coobird.thumbnailator.geometry.Positions; 
 
import javax.imageio.ImageIO; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
 
/**
 * User: Greta.Wang
 * Date: 12-11-3
 * Read nine pictures from file system, and compose them to one, in the process, each picture will be added a watermark.
 */ 
public class ComposePicture { 
    public static void main(String args[]) 
            throws IOException { 
        //从工程中去读九张图片,并对图片做进一步的处理(缩小比例,旋转30度,加水印),并把图片保存在内存中做进一步的处理 
        List<BufferedImage> bufferedImageList = readPicturesToMemory(); 
        //在内存中,合并九张图片成一张图片 
        BufferedImage bufferedImageNineByNine = composeNinePicturesToOne(bufferedImageList); 
        //把内存中的图片写入到指定的文件中 
        File fileOutPut = new File(System.getProperty("user.dir") + "/handledpictures/compose.jpg"); 
        ImageIO.write(bufferedImageNineByNine, "jpg", fileOutPut); 
    } 
    public static List<BufferedImage> readPicturesToMemory() 
            throws IOException { 
        String[] pathArray = new String[9]; 
        List<BufferedImage> bufferedImageList = new ArrayList<BufferedImage>(); 
        //Thumbnail读取水印文件到内存中 
        BufferedImage waterMarkBufferedImage = Thumbnails.of(ComposePicture.class.getClassLoader().getResource("5.png").getFile()) 
                //Thumbnail的方法,根据比例缩小,0.4f意思是缩小到原图的40% 
                .scale(0.4f) 
                //读取成BufferedImage对象 
                .asBufferedImage(); 
        //读取9张待处理的图片到内存中 
        for (int i = 0; i < 9; i++) { 
            //取得图片的路径 
            pathArray[i] = ComposePicture.class.getClassLoader().getResource("IMG_000" + i + ".JPG").getFile(); 
            BufferedImage image = Thumbnails.of(pathArray[i]) 
                    //按比例缩小 
                    .scale(0.05f) 
                    //加水印,0.5f表示的是透明度 
                    .watermark(Positions.CENTER, waterMarkBufferedImage, 0.5f) 
                    //旋转30度 
                    .rotate(30) 
                    //读取成BufferedImage对象 
                    .asBufferedImage(); 
            bufferedImageList.add(image); 
        } 
        return bufferedImageList; 
    } 
 
    public static BufferedImage composeNinePicturesToOne(List<BufferedImage> bufferedImageList) { 
        //取得处理后图像的宽度和高度,要处理的9张图片有相同的高度和宽度 
        int width = bufferedImageList.get(0).getWidth(); 
        int height = bufferedImageList.get(0).getHeight(); 
        List<int[]> imageArrayList = new ArrayList<int[]>(); 
        for (BufferedImage bufferedImage : bufferedImageList) { 
            int[] oneImageArray = new int[width * height]; 
            //读取图片成byte数组 
            oneImageArray = bufferedImage.getRGB(0, 0, width, height, oneImageArray, 0, width); 
            imageArrayList.add(oneImageArray); 
        } 
        //合并图片到同一个bufferedImage对象中 
        BufferedImage bufferedImageNineByNine = new BufferedImage(width * 3, height * 3, BufferedImage.TYPE_INT_RGB); 
        int x = 0; 
        int y = 0; 
        //根据x,y的坐标,先输出x轴上的三张,然后输出y轴上的图片 
        for (int[] buffered : imageArrayList) { 
            bufferedImageNineByNine.setRGB(width * y, height * x, width, height, buffered, 0, width); 
            y++; 
            if (y % 3 == 0) { 
                y = 0; 
                x++; 
            } 
        } 
        return bufferedImageNineByNine; 
    } 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,