Mebius· 2023-05-31 01:41 采纳率: 50%
浏览 57
已结题

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

  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2023-06-03 10:24
    关注
    
    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')
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊