某验图片还原代码

某验图片还原代码


```java


public class GeetestImage {


    public static void main(String[] args) throws IOException {
        String src = "https://static.geetest.com/pictures/gt/7bfaaa72b/7bfaaa72b.jpg";

        BufferedImage bufferedImageBig = combineImages(src);
        src = "https://static.geetest.com/pictures/gt/7bfaaa72b/bg/d9e29c6fc.jpg";
        BufferedImage bufferedImageSrc = combineImages(src);

        int xDiffRectangeOfTwoImage = findXDiffRectangeOfTwoImage(bufferedImageBig, bufferedImageSrc);
        System.out.println(xDiffRectangeOfTwoImage);


    }

    /**
     * 合并图片
     * @param src
     * @return
     */
    public static BufferedImage combineImages(String src) {
        try {
            int r =160;
            int height = r / 2;
            //别问我从哪来的 代码里面扣出来的
            int []Ut =new int[]{39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 42, 12, 13, 23, 22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17};
            BufferedImage image = ImageIO.read(new URL(src));
            BufferedImage imageResult = new BufferedImage(260, r , BufferedImage.TYPE_INT_RGB);
            for (int _ = 0; _ < 52; _ += 1) {
                int x = Ut[_] % 26 * 12 + 1;
                int y = 25 < Ut[_] ? height : 0;
                int[] imageArrayFirst = new int[10 * height];
                imageArrayFirst = image.getRGB(x, y, 10, height, imageArrayFirst, 0, 10);
                int startX = _ % 26 * 10;
                int startY = 25 < _ ? height : 0;
                imageResult.setRGB(startX, startY, 10, height, imageArrayFirst, 0, 10);
            }
            return imageResult;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static int findXDiffRectangeOfTwoImage(BufferedImage image1, BufferedImage image2) {
        try {
            int width1 = image1.getWidth();
            int height1 = image1.getHeight();
            int width2 = image2.getWidth();
            int height2 = image2.getHeight();
            if (width1 != width2) return -1;
            if (height1 != height2) return -1;
            int left = 0; /** * 从左至右扫描 */
            boolean flag = false;
            for (int i = 0; i < width1; i++) {
                for (int j = 0; j < height1; j++)
                    if (isPixelNotEqual(image1, image2, i, j)) {
                        left = i;
                        flag = true;
                        break;
                    }
                if (flag) break;
            }
            return left;
        } catch (Exception ex) {
            ex.printStackTrace();
            return -1;
        }
    }

    private static boolean isPixelNotEqual(BufferedImage image1, BufferedImage image2, int i, int j) {
        int pixel1 = image1.getRGB(i, j);
        int pixel2 = image2.getRGB(i, j);
        int[] rgb1 = new int[3];
        rgb1[0] = (pixel1 & 0xff0000) >> 16;
        rgb1[1] = (pixel1 & 0xff00) >> 8;
        rgb1[2] = (pixel1 & 0xff);
        int[] rgb2 = new int[3];
        rgb2[0] = (pixel2 & 0xff0000) >> 16;
        rgb2[1] = (pixel2 & 0xff00) >> 8;
        rgb2[2] = (pixel2 & 0xff);
        for (int k = 0; k < 3; k++)
            if (Math.abs(rgb1[k] - rgb2[k]) > 50)
                //因为背景图会有一些像素差异
                return true;
        return false;
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue 3中实现百度地图热力图,你可以使用vue-baidu-map插件。下面是实现步骤: 1. 首先,在项目中安装vue-baidu-map插件。你可以使用以下命令进行安装: ``` npm install vue-baidu-map --save ``` 2. 在项目的入口文件中导入vue-baidu-map插件,并将其注册为Vue的全局组件。你可以在main.js文件中添加以下代码: ``` import Vue from 'vue' import BaiduMap from 'vue-baidu-map' Vue.use(BaiduMap, { ak: '你的密钥' }) ``` 3. 在需要使用热力图的组件中,使用`<baidu-map>`标签,并设置对应的属性来配置地图和热力图的参数。例如,你可以设置`<baidu-map>`的属性如下: ``` <baidu-map :center="center" :zoom="zoom" :scroll-wheel-zoom="true" :map-types="mapTypes"> <baidu-heatmap :max="max" :radius="radius" :gradient="gradient"></baidu-heatmap> </baidu-map> ``` 在上述代码中,你需要根据需要设置`center`、`zoom`、`scroll-wheel-zoom`、`map-types`等属性来配置地图的中心点、缩放级别、允许滚轮缩放以及地图类型。同时,你还需要设置`<baidu-heatmap>`组件的`max`、`radius`和`gradient`属性来配置热力图的最大值、半径和渐变区间。 4. 最后,在你的组件中引入所需的地图和热力图组件: ``` import { BaiduMap, BaiduHeatmap } from 'vue-baidu-map' ``` 这样,你就可以在Vue 3中实现百度地图热力图了。记得替换密钥和其他地区的经纬度等参数,以满足你的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值