使用Python映像库创建压缩循环?

使用Python映像库创建压缩循环?,python,python-imaging-library,image-compression,Python,Python Imaging Library,Image Compression,我正在尝试编写一个程序,它将接收我输入的图像文件,以原始质量的50%保存一个新的压缩版本,然后打开新文件并再次运行n次。本质上,我需要一个巨大的压缩反馈循环,每次创建一个新文件。这是一个视觉艺术项目 不幸的是,它看起来不像PIL会重新压缩使用它自己的压缩算法创建的文件,所以基本上当我尝试运行它时,我最终得到了n个相同的文件 我正在运行OS X 10.7的Intel Mac上使用PIL和Python 3.3。这是整个计划: import os from PIL import Image def

我正在尝试编写一个程序,它将接收我输入的图像文件,以原始质量的50%保存一个新的压缩版本,然后打开新文件并再次运行n次。本质上,我需要一个巨大的压缩反馈循环,每次创建一个新文件。这是一个视觉艺术项目

不幸的是,它看起来不像PIL会重新压缩使用它自己的压缩算法创建的文件,所以基本上当我尝试运行它时,我最终得到了n个相同的文件

我正在运行OS X 10.7的Intel Mac上使用PIL和Python 3.3。这是整个计划:

import os
from PIL import Image

def compressLoop(infile, times):
    '''
    Progressively loads, compresses, creates files based on original JPEG 'times' number of times.
    '''
    n = 1
    baseName, e = os.path.splitext(infile)
    try:
        while n <= times:
            f, e = os.path.splitext(infile)
            f = (baseName + str(n))
            outfile = f + ".jpg"
            #open previously generated file
            compImg = Image.open(infile)
            #compress file at 50% of previous quality
            compImg.save(outfile, "JPEG", quality=50)
            infile = outfile
            n = n+1
    except IOError:
        print("Cannot convert", infile)

def main():
    infile = str(input("Filename to compress: "))
    times = int(input("Times to process: "))
    compressLoop(infile, times)

main()
导入操作系统
从PIL导入图像
def压缩循环(填充,次数):
'''
根据原始JPEG“次数”逐步加载、压缩和创建文件。
'''
n=1
baseName,e=os.path.splitext(内嵌)
尝试:

为什么你不能把100除以2n倍,然后用它来表示质量呢?我试过了,但是质量参数只取整数,所以我很快就讲到了。JPEG质量50并不意味着上次质量的50%,它意味着最好质量的50%。因此,以50%的重复率进行解压缩和重新压缩只会产生很小的效果。因此,为了实现我所期望的,我需要以某种方式将压缩文件标记为最佳质量,对吗?有办法吗?@user3023883:没有,你没有抓住重点。“最佳质量”指“此输入的JPEG算法的最佳质量”。没有任何标记;它有解压的部分,你告诉它用这些部分尽可能做到一半。简言之,你想做的没有任何意义。