Exemplo n.º 1
0
def mergeImagePdf(op, webtoonId, viewNo, cutNo, savePath, tmpPath,
                  runningThreadNo, cookie, noProgressBar, digits):
    pdf_list = []
    for i in range(0, cutNo):
        try:
            im = Image.open(
                os.path.join(
                    tmpPath, "%s_%s_%d.png" %
                    (getWebtoonName(op, webtoonId, cookie), str(viewNo), i)))
            if im.getbands() != ('R', 'G', 'B'):
                im = im.convert('RGBA')
            if len(im.getbands()) == 4:
                back = Image.new('RGBA',
                                 size=im.size,
                                 color=(255, 255, 255) + (255, ))
                im = alpha_composite(im, back).convert('RGB')
                im.save(
                    os.path.join(
                        tmpPath, "%s_%s_%d.png" % (getWebtoonName(
                            op, webtoonId, cookie), str(viewNo), i)))
            pdf_list.append(
                os.path.join(
                    tmpPath, "%s_%s_%d.png" %
                    (getWebtoonName(op, webtoonId, cookie), str(viewNo), i)))
        except:
            pass
    pdf = convert(pdf_list)
    with open(
            os.path.join(
                savePath, "%%s_%%0%dd.pdf" % digits %
                (getWebtoonName(op, webtoonId, cookie), viewNo)), "wb") as f:
        f.write(pdf)
    if noProgressBar:
        log("m " + str(viewNo), 3)
    runningThreadNo.value -= 1
Exemplo n.º 2
0
def mergeImage(op, webtoonId, viewNo, cutNo, savePath, tmpPath,
               runningThreadNo, cookie, digits):
    file_list = []
    size_y = []
    ti = Image.open(
        os.path.join(
            tmpPath, "%s_%s_0.png" %
            (getWebtoonName(op, webtoonId, cookie), str(viewNo))))
    nx = ti.size[0]
    ti.close()
    for i in range(0, cutNo):
        file = os.path.join(
            tmpPath, "%s_%s_%d.png" %
            (getWebtoonName(op, webtoonId, cookie), str(viewNo), i))
        image = Image.open(file)
        im = image.resize((nx, int(image.size[1] / image.size[0] * nx)))
        file_list.append(im)
        size_y.append(im.size[1])
        image.close()
    ny = sum(size_y)
    canv = Image.new("RGB", (nx, ny), (256, 256, 256))
    sumY = 0
    for idx in range(len(file_list)):
        area = (0, sumY, nx, size_y[idx] + sumY)
        canv.paste(file_list[idx], area)
        sumY = sumY + size_y[idx]
    canv.save(
        os.path.join(
            savePath, "%%s_%%0%dd.png" % digits %
            (getWebtoonName(op, webtoonId, cookie), viewNo)), 'PNG')
    log("m " + str(viewNo), 3)
    runningThreadNo.value -= 1
Exemplo n.º 3
0
def downPartialEpisode(op, webtoonId, start, finish, saveDir, divNo, modular,
                       cnt, qu, savedEpisode, cookie, pbar):
    for viewNo in range(start, finish + 1):
        imgNo = getImgNo(op, webtoonId, viewNo, cookie)
        for i in range(modular, imgNo, divNo):
            imgName = os.path.join(
                saveDir,
                getWebtoonName(op, webtoonId, cookie) + "_" + str(viewNo) +
                "_" + str(i) + ".png")
            saveImg(op, webtoonId, viewNo, i, imgName, cookie)
        cnt[viewNo] -= 1
        if cnt[viewNo] == 0:
            qu.put(viewNo)
            if not pbar:
                log("d " + str(viewNo), 5)
    savedEpisode.value -= 1
Exemplo n.º 4
0
def downWebtoon(op,
                webtoonId,
                start,
                finish,
                saveDir,
                mergeOption,
                noProgressBar,
                multiThreadCount=8,
                multiThreadMergingCount=8,
                cookie=None):
    temp_dir = tempfile.TemporaryDirectory()
    pbarD = None
    pbarM = None
    if not noProgressBar:
        if mergeOption:
            pbarD = tqdm(total=finish - start + 1,
                         maxinterval=1,
                         position=0,
                         desc="Download")
            pbarM = tqdm(total=finish - start + 1,
                         maxinterval=1,
                         position=1,
                         desc="Merge")
        else:
            pbarD = tqdm(total=finish - start + 1, mininterval=0.01)
    if op == 'naver' or op == 'nbest' or op == 'nchall':
        webtoonId = int(webtoonId)
    thrs = list()
    cnt = Array('i', [multiThreadCount] * (finish + 1))
    runningThreadNo = Value('i', 0)
    qu = Queue()
    leftEpisode = finish - start + 1
    savedEpisode = Value('i', finish - start + 1)
    for i in range(0, multiThreadCount):
        if mergeOption:
            thr = Process(target=downPartialEpisode,
                          args=(op, webtoonId, start, finish, temp_dir.name,
                                multiThreadCount, i, cnt, qu, savedEpisode,
                                cookie, not not pbarD))
        else:
            thr = Process(target=downPartialEpisode,
                          args=(op, webtoonId, start, finish, saveDir,
                                multiThreadCount, i, cnt, qu, savedEpisode,
                                cookie, not not pbarD))
        thrs.append(thr)
        thr.start()
    laRunningThreadNo = 0
    if mergeOption:
        while leftEpisode > 0:
            if laRunningThreadNo != runningThreadNo.value:
                diff = laRunningThreadNo - runningThreadNo.value
                if not noProgressBar:
                    clear()
                    pbarM.update(diff)
                    clear()
                    pbarD.refresh()
                    pbarM.refresh()
                laRunningThreadNo -= diff
            if savedEpisode.value == 0 and multiThreadCount:
                multiThreadMergingCount += multiThreadCount / 2
                multiThreadCount = 0
            if not qu.empty(
            ) and runningThreadNo.value < multiThreadMergingCount:
                targetEpisode = qu.get()
                if targetEpisode not in shared.imgNo:
                    getImgNo(op, webtoonId, targetEpisode, cookie)
                if shared.imgNo[targetEpisode] == 0:
                    if not noProgressBar:
                        clear()
                        pbarM.update(1)
                        clear()
                        pbarD.refresh()
                        pbarM.refresh()
                    else:
                        log("m " + str(targetEpisode), 5)
                    leftEpisode -= 1
                    continue
                runningThreadNo.value += 1
                laRunningThreadNo += 1
                if not noProgressBar:
                    clear()
                    pbarD.update(1)
                    clear()
                    pbarD.refresh()
                    pbarM.refresh()
                if mergeOption == 1:
                    thr = Process(target=mergeImage,
                                  args=(op, webtoonId, targetEpisode,
                                        shared.imgNo[targetEpisode], saveDir,
                                        temp_dir.name, runningThreadNo, cookie,
                                        len(str(finish))))
                else:
                    thr = Process(target=mergeImagePdf,
                                  args=(op, webtoonId, targetEpisode,
                                        shared.imgNo[targetEpisode], saveDir,
                                        temp_dir.name, runningThreadNo, cookie,
                                        noProgressBar, len(str(finish))))
                thr.start()
                thrs.append(thr)
                leftEpisode -= 1
    for i in thrs:
        i.join()
    temp_dir.cleanup()
    try:
        if not noProgressBar:
            diff = laRunningThreadNo - runningThreadNo.value
            if not noProgressBar:
                clear()
                pbarM.update(diff)
                clear()
                pbarD.refresh()
                pbarM.refresh()
            laRunningThreadNo -= diff
            clear()
            pbarD.close()
            pbarM.close()
    except:
        pass