说明!文章仅供学习交流,如若出现侵权等行为请联系我,立即删除!!!
人工还原
乱序验证码如F图为例
还愿的图片如下图为例
①判断当前验证图片分了几个部分
观察图片,好像分成了13份,但当对13份进行拼接时发现不能够还原图片,细瞅,每一份好像从中心细开始进行了水平翻转,上下翻转
②尝试将分开的部分进行重新拼接
③使用代码进行尝试
前情知识
使用py中的Image库
- 裁剪方法
cropped_img = img.crop((left, top, right, bottom))
left为需要裁剪的左边界,right为需要裁剪的右边界,top为上边界,bottom为裁剪的下边界 - 拼接方法
merge_img = new_image.paste(image, (left, top, right, bottom))
第一个参数为需要进行拼接的图片,第二参数为拼接到参数的位置
代码实测
#分割图片
def cropped_image(imgPath):
image1 = Image.open(imgPath)
filename = imgPath.split('.')[0]
print(filename)
path = f'{filename}'
print(path)
if not os.path.exists(path):
os.makedirs(path)
# 获取图片尺寸
width, height = image1.size
print(width,height)
for i in range(1,int(width/26+1)+1):
new_image = Image.new('RGB', (24, 160))
# 裁剪图片
leftx = 24*(i-1)
rightx = leftx + 24
print(leftx,rightx)
cropped_image = image1.crop((leftx, 0, rightx, 160))
# 保存裁剪后的图片
cropped_image.save(f'{path}/{i}.png')
return path
#按照正确顺序重排图片
def merge(filePath):
newImagename = 'merged_image_new.jpg'
ls = [7,12,8,11,5,13,4,2,1,6,3,10,9]
new_image = Image.new('RGB', (312, 160))
for a in range(len(ls)):
image = Image.open(f'{filePath}/{str(ls[a])}.png')
leftx = 24 * a
new_image.paste(image, (leftx, 0))
new_image.save(f'{filePath}/{newImagename}')
return newImagename
#实现左右反转
def swap(filePath,filename):
new_image = Image.new('RGB', (312, 160))
image1 = Image.open(f'{filePath}/{filename}')
for i in range(0,13):
x = 12*(i*2+1)
print(x)
if (i %2 != 0):
l_image_x = image1.crop((x-12, 80, x, 160))
r_image_x = image1.crop((x, 80, x+12, 160))
new_image.paste(r_image_x, (x, 0, x+12 , 80))
new_image.paste(l_image_x, (x-12, 0, x, 80))
l_image_s = image1.crop((x-12, 0, x, 80))
r_image_s = image1.crop((x, 0, x+12, 80))
new_image.paste(r_image_s, (x-12, 80, x, 160))
new_image.paste(l_image_s, (x, 80, x+12 , 160))
else:
l_image_x = image1.crop((x-12, 80, x, 160))
r_image_x = image1.crop((x, 80, x+12, 160))
new_image.paste(r_image_x, (x-12, 0, x, 80))
new_image.paste(l_image_x, (x, 0, x+12 , 80))
l_image_s = image1.crop((x-12, 0, x, 80))
r_image_s = image1.crop((x, 0, x+12, 80))
new_image.paste(r_image_s, (x, 80, x+12 , 160))
new_image.paste(l_image_s, (x-12, 80, x, 160))
new_image.save(f'{filePath}/bg.png')
def merge_slide(filePath):
slide = Image.open("slide.png")
bg = Image.open(f'{filePath}/bg.png')
# 拼接图片
bg.paste(slide, (0, 40))
# 保存拼接后的图片
bg.save(f'{filePath}/newbg.jpg')
在代码测试的时候发现,每部分的转换会从中心线分割之后,将顺序为单数进行水平翻转,否则不翻转!!!
最后!!,代码不够通用性,以后遇到会进行进一步修改。增强代码的通用性,有什么问题可以评论。