少年JUMP+的漫画(https://shonenjumpplus.com),无法直接保存。 源代码里虽然能找到图片地址,但不是正常图片。如图:
・右边红框部分是服务器传来的图片
・左边红框部分是在浏览器上看到的重新拼接过的:
 通过观察,发现服务器传来的jpg图片:
・jpg图片大小 :W760 x H1200px
・图片分割成16个小块(右边跟下边2小条不动),每块面积:W184 x H296px
・横竖位置对调(Z字型→N字型))
・浏览器将横竖位置还原后重绘
如图:

这样,我们可以用python做一个简单的函数,把图片还原:
from PIL import Image
from os import path


def join_image(input_img_path):
    bounds = {  # 順番: N字型
        1: {"crop": (0, 0, 184, 296), "paste": (0, 0)},
        2: {"crop": (0, 296, 184, 592), "paste": (184, 0)},
        3: {"crop": (0, 592, 184, 888), "paste": (368, 0)},
        4: {"crop": (0, 888, 184, 1184), "paste": (552, 0)},
        #
        5: {"crop": (184, 0, 368, 296), "paste": (0, 296)},
        6: {"crop": (184, 296, 368, 592), "paste": (184, 296)},
        7: {"crop": (184, 592, 368, 888), "paste": (368, 296)},
        8: {"crop": (184, 888, 368, 1184), "paste": (552, 296)},
        #
        9: {"crop": (368, 0, 552, 296), "paste": (0, 592)},
        10: {"crop": (368, 296, 552, 592), "paste": (184, 592)},
        11: {"crop": (368, 592, 552, 888), "paste": (368, 592)},
        12: {"crop": (368, 888, 552, 1184), "paste": (552, 592)},
        #
        13: {"crop": (552, 0, 736, 296), "paste": (0, 888)},
        14: {"crop": (552, 296, 736, 592), "paste": (184, 888)},
        15: {"crop": (552, 592, 736, 888), "paste": (368, 888)},
        16: {"crop": (552, 888, 736, 1184), "paste": (552, 888)}
    }
    old_image = Image.open(input_img_path)
    new_img = old_image.copy()
    unuse = (1, 6, 11, 16)  # (縦横)と関係なく順番が同じ
    for i in range(1, 17):
        if i in unuse:
            continue
        new_img.paste(old_image.crop(bounds[i]["crop"]), bounds[i]["paste"])
    return new_img


input_img_path = "test.jpg"
new_img = join_image(input_img_path)
# filename.ext -> filename_変換.ext
new_img_path = "_変換".join(path.splitext(input_img_path))
new_img.save(new_img_path, quality=80)
当然,浏览器user agent设置成移动版的设备(如ipad)的话,经常会有惊喜!