通过使用java获取地图切片

主要为了腾讯地图
PictureCut.java

public class PictureCut {
    /**
     * @param srcImageFile  源图像地址
     * @param descImageFile 切片目标文件夹
     * @param cols          目标切片总共列数
     * @param rows          目标切片总共行数
     */
    public static void cut(File srcImageFile, String descImageFile, int cols, int rows) {
        try {
            // 读取源图像
            BufferedImage bi = ImageIO.read(srcImageFile);
            // 源图宽度
            int srcWidth = bi.getWidth();
            // 源图高度
            int srcHeight = bi.getHeight();
            Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
            // 切片横向大小
            int destWidth = (int) Math.floor(srcWidth / cols) + 1;
            // 切片纵向大小
            int destHeight = (int) Math.floor(srcHeight / rows) + 1;
            // 计算切片的横向和纵向数量
            Image img;
            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);
                    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 + i + j + "_" +
                            "pre_map_" + ".jpg"));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 即将要切片的图片地址
        String tempFilePath = "D:/code-project/full-stack/CodeSameples/hanshansi/electronic-tour/public/ditu/pictureCut";
    	// /origin_fs02.jpg 图片名称
        File fromFile = new File(tempFilePath + "/origin_fs02.jpg");
        // 切出 6 * 6 个图片
        // /cut-img-jpg 切完后的图片存放目录名
        cut(fromFile,
                tempFilePath + "/cut-img-jpg" + "/",
                6, 6);
    }

}
posted @ 2023-02-20 14:55  中亿丰数字科技  阅读(39)  评论(0)    收藏  举报