图片处理的三方工具

图片处理的三方工具

1.应用场景

对图片的操作,按比例缩放,固定尺寸缩放,按尺寸等比缩放,旋转,加水印,压缩图片质量,解决jdk原生对图片编码的兼容问题。

2.示例

2.1 jdk原生不支持的编码处理

public static void main(String[] args) throws Exception {
        InputStream in = new FileInputStream("D:\\11.jpg");
        System.out.println("输入数据量in="+in.available());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[];
        while(true) {
            int offset = -1;
            try {
                offset = in.read(buffer);
            }catch(EOFException ex){
                ex.printStackTrace();
            }
            if(offset!=-1){
                baos.write(buffer, 0, offset);
            }else{
                break;
            }
        }
        baos.flush();
        InputStream stream1 = new ByteArrayInputStream(baos.toByteArray());
        BufferedImage bis = ImageIO.read(stream1);

    }

错误信息

输入数据量in=1250482
Exception in thread "main" javax.imageio.IIOException: Unsupported Image Type
	at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1079)
	at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1050)
	at javax.imageio.ImageIO.read(ImageIO.java:1448)
	at javax.imageio.ImageIO.read(ImageIO.java:1352)
	at com.example.demo.latitude.util.ImageUtil.main(ImageUtil.java:35)

Process finished with exit code 1

错误原因

javax.imageio.IIOException: Unsupported Image Type
一般是由于图片颜色模式是CMYK导致的,因为其内部读取文件的类JPEGImageReader只能读取RGB color mode,一般经过ps的图片自动保存曾jpeg格式颜色空间都会改变成CMYK,如果强行转换颜色空间会导致图片失色,gift的图色彩模式是CMYK模式(注意,这是给印刷机用的)在java.awt包下的Image类只能使用RGB模式。可以添加twelvemonkeys的jar即可解决报错,jdk的ImageIO有自动发现功能,会自动查找相关的编解码类并使用,而不使用jdk默认的编解码类,因此代码也不用修改,很方便。

需要的jar

        <!--图片处理 start -->
        <dependency>
            <groupId>com.twelvemonkeys.imageio</groupId>
            <artifactId>imageio-jpeg</artifactId>
            <version>3.6</version>
        </dependency>
        <dependency>
            <groupId>com.twelvemonkeys.imageio</groupId>
            <artifactId>imageio-tiff</artifactId>
            <version>3.6</version>
        </dependency>
        <!--
        Optional dependency. Needed only if you deploy `ImageIO` plugins as part of a web app.
        Make sure you add the `IIOProviderContextListener` to your `web.xml`, see above.
        -->
        <dependency>
            <groupId>com.twelvemonkeys.servlet</groupId>
            <artifactId>servlet</artifactId>
            <version>3.6</version>
        </dependency>
        <!--图片处理 end -->

2.2 图片的快速处理工具

图片缩略图

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        Thumbnails.of(srcImagePath).size(200, 300).toFile(newImagePath);

指定比例缩略图

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        Thumbnails.of(srcImagePath).scale(0.9f).toFile(newImagePath);

对图片进行旋转

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        Thumbnails.of(srcImagePath).scale(1.0f).rotate(180).toFile(newImagePath);

对图片进行格式转换

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        Thumbnails.of(srcImagePath).scale(1.0f).outputFormat("jpg").toFile(newImagePath);

对图片进行剪裁

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        Thumbnails.of(srcImagePath).scale(1.0f).sourceRegion(Positions.CENTER, 400,      400).toFile(newImagePath);

对图片进行加水印操作

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        String warterImagePath = "C:\\Users\\23892\\Desktop\\3.png";
        Thumbnails.of(srcImagePath).scale(1.0f).watermark(Positions.CENTER, ImageIO.read(new File(warterImagePath)), 0.25f).toFile(newImagePath);

对图片进行加文字水印操作

        String newImagePath = "C:\\Users\\23892\\Desktop\\2.jpg";
        String srcImagePath = "C:\\Users\\23892\\Desktop\\2.png";
        BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();
        g.setColor(Color.LIGHT_GRAY);
        g.drawRect(0, 0, 10, 10);
        char[] data = "lonsun".toCharArray();
        g.drawChars(data, 0, data.length, 5, 32);
        Thumbnails.of(srcImagePath).scale(1.0f).watermark(Positions.CENTER, bi, 1.0f).toFile(newImagePath);

需要的jar

        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值