分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
比较实用, 可以处理gif动态图片
java图片处理工具类:
package com.pinker.util;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Arrays;import java.util.Iterator;import javax.imageio.IIOImage;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.ImageWriter;import javax.imageio.stream.ImageInputStream;import javax.imageio.stream.ImageOutputStream; /** * 图像裁剪以及压缩处理工具类 * * 主要针对动态的GIF格式图片裁剪之后,只出现一帧动态效果的现象提供解决方案 * * 提供依赖三方包解决方案(针对GIF格式数据特征一一解析,进行编码解码操作) * 提供基于JDK Image I/O 的解决方案(JDK探索失败) */public class ImageUtil2 { public enum IMAGE_FORMAT{ BMP("bmp"), JPG("jpg"), WBMP("wbmp"), JPEG("jpeg"), PNG("png"), GIF("gif"); private String value; IMAGE_FORMAT(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } /** * 获取图片格式 * @param file 图片文件 * @return 图片格式 */ public static String getImageFormatName(File file)throws IOException{ String formatName = null; ImageInputStream iis = ImageIO.createImageInputStream(file); Iterator<ImageReader> imageReader = ImageIO.getImageReaders(iis); if(imageReader.hasNext()){ ImageReader reader = imageReader.next(); formatName = reader.getFormatName(); } return formatName; } /************************* 基于三方包解决方案 *****************************/ /** * 剪切图片 * * @param source 待剪切图片路径 * @param targetPath 裁剪后保存路径(默认为源路径) * @param x 起始横坐标 * @param y 起始纵坐标 * @param width 剪切宽度 * @param height 剪切高度 * * @returns 裁剪后保存路径(图片后缀根据图片本身类型生成) * @throws IOException */ public static String cutImage(String sourcePath , String targetPath , int x , int y , int width , int height) throws IOException{ File file = new File(sourcePath); if(!file.exists()) { throw new IOException("not found the image:" + sourcePath); } if(null == targetPath || targetPath.isEmpty()) targetPath = sourcePath; String formatName = getImageFormatName(file); if(null == formatName) return targetPath; formatName = formatName.toLowerCase(); // 防止图片后缀与图片本身类型不一致的情况 String pathPrefix = getPathWithoutSuffix(targetPath); targetPath = pathPrefix + formatName; // GIF需要特殊处理 if(IMAGE_FORMAT.GIF.getValue() == formatName){ GifDecoder decoder = new GifDecoder(); int</