python转义node


# -*- coding: utf-8 -*-
import io
from pathlib import Path

from PIL import Image


def parse_bg_captcha(img, im_show=False, save_path=None):

    if isinstance(img, (str, Path)):
        _img = Image.open(img)
    elif isinstance(img, bytes):
        _img = Image.open(io.BytesIO(img))
    else:
        raise ValueError(f'输入图片类型错误, 必须是<type str>/<type Path>/<type bytes>: {type(img)}')
    # 图片还原顺序, 定值
    _Ge = [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]
    w_sep, h_sep = 10, 80

    # 还原后的背景图
    new_img = Image.new('RGB', (260, 160))

    for idx in range(len(_Ge)):
        x = _Ge[idx] % 26 * 12 + 1
        y = h_sep if _Ge[idx] > 25 else 0
        # 从背景图中裁剪出对应位置的小块
        img_cut = _img.crop((x, y, x + w_sep, y + h_sep))
        print(img_cut)
        # 将小块拼接到新图中
        new_x = idx % 26 * 10
        new_y = h_sep if idx > 25 else 0
        new_img.paste(img_cut, (new_x, new_y))

        save_path = Path(save_path).resolve().__str__()
        new_img.save(save_path)
        
    return new_img


if __name__ == '__main__':
    parse_bg_captcha("bg.webp", im_show=True, save_path='bg.jpg')


转义成node.js 使用sharp


const sharp = require('sharp');//https://sharp.pixelplumbing.com/api-constructor#clone

async function parse_bg_captcha(img, im_show = false, save_path = null) {
    let _img = sharp(img);
    let { width,height} = await _img.metadata();

 `
    let bg = _img.extract({ left: 100, top: 100, width: 100, height: 100 });
    bg.toFile(save_path); return;
    console.log(save_path)
    _img.toFile(save_path);  return;`
   
    let _Ge=[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];
    let [w_sep, h_sep] = [10, 80];

    let new_img = sharp({
        create: {
            width: 260,
            height: 160,
            channels: 3,
            background: { r: 255, g: 255, b: 255 }
        }
    });
    let paste = [];
    for (let idx = 0; idx < _Ge.length; idx++) {
        let x = _Ge[idx] % 26 * 12 + 1;
        let y = _Ge[idx] > 25 ? h_sep : 0;
        let data = { left: x, top: y, width:  w_sep, height: h_sep };
        let img_cut;
       
        try {
            img_cut = await _img.clone().extract(data).toBuffer();
        }
        catch (e) {
            console.log(e, '==>', data);
            continue
        }
        let new_x = idx % 26 * 10
        let new_y = idx > 25 ? h_sep : 0;

        paste.push({ input: img_cut, left: new_x, top: new_y });

    }
    await new_img.composite(paste).toFile(save_path)
}
parse_bg_captcha('bg.webp',false ,'bg.jpg')

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632