图片切割 保存到指定文件夹
程序员文章站
2022-03-27 07:52:19
...
今天工作有个需求,要帮安卓端切好长图再一张张传过去,找了一堆然后自己整理到一份比较满足我需求的,现在放到这里以供路过的人学习。
package pic;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import javax.imageio.ImageIO;
public class PictureCut {
/**
* @param srcImageFile
* 源图像地址
* @param descImageFile
* 切片目标文件夹
* @param destWidth
* 目标切片宽度
* @param destHeight
* 目标切片高度
*/
public static void cut(String srcImageFile, String descImageFile, int destWidth, int destHeight) {
try {
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
// 源图宽度
int srcWidth = bi.getWidth();
destWidth = srcWidth;
// 源图高度
int srcHeight = bi.getHeight();
System.out.println("源图宽度" + srcWidth);
System.out.println("源图高度" + srcHeight);
if (srcWidth >= destWidth && srcHeight >= destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
// 切片横向数量
int cols = 0;
// 切片纵向数量
int rows = 0;
// 计算切片的横向和纵向数量
if (srcWidth % destWidth == 0) {
cols = srcWidth / destWidth;
} else {
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
System.out.println("cols = " + cols);
if (srcHeight % destHeight == 0) {
rows = srcHeight / destHeight;
} else {
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
System.out.println("rows = " + rows);
ImageFilter cropFilter;
// 循环建立切片
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// 四个参数分别为图像起点坐标和宽高
cropFilter = new CropImageFilter(j * destWidth, i * destHeight, (j + 1) * destWidth, (i + 1) * destHeight);
if (i == rows - 1 && j == cols - 1) {
System.out.println("最后一张处理多余的黑边");
int c = srcHeight % destHeight;
destHeight = c;
}
Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制缩小后的图
g.dispose();
// 输出为文件
ImageIO.write(tag, "JPEG", new File(descImageFile + "pre_map_" + i + "_" + j + ".jpg"));
System.out.println(descImageFile + "pre_map_" + i + "_" + j + ".jpg");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
cut("D://pic//pp.jpg", "D:\\pic\\", 0, 500);
System.out.println("1");
}
}
顺便处理了最后一张有黑边的情况,可以算是很简便了。
有些打印的语句可以自行删除。
推荐阅读
-
php随机显示指定文件夹下图片的方法,_PHP教程
-
php合并图片,生成gif动态图片,保存到指定目录
-
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名),
-
Unity 截图并将图片保存到手机指定文件夹
-
linux下采用shell脚本实现批量为指定文件夹下图片添加水印的方法
-
请问PHP正规表达式获取指定文件夹里的所有图片名,再把这些相关图片删除的操作
-
怎样提交上传图片,并缩放图片到指定文件夹下
-
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
-
Java Servlet上传图片到指定文件夹并显示图片
-
php上传图片到指定位置路径保存到数据库的具体实现