我用Python编写了一个函数,它以一定的质量级别(0到100,越高越好)保存图像。根据质量级别,最终文件的大小(以字节为单位)
我需要编写一个函数,为图像选择尽可能最佳的质量级别,并将其保持在最大文件大小下(以字节为单位)。我唯一能做的就是尝试
最简单的方法是:以一定的质量保存文件,如果文件比预期的大,则降低质量,以此类推。 不幸的是,这种方法非常耗时。即使我在每次迭代中将质量降低了5个点,风险是我必须在找到正确的质量之前将同一个文件保存21次
另一个解决方案是:尝试使用之前质量的一半,并根据结果关注较低的质量范围或较高的质量范围。 让我澄清一下:
第二个解决方案始终需要6次迭代
这里是一个Python实现:
limit_file_size = 512 # maximum file size, change this for different results
q_max = 100
q_min = 0
quality = q_min + (q_max - q_min) // 2
while True:
file_size = save_file(quality)
if (q_max - q_min) <= 5: break
if file_size > limit_file_size:
q_max = quality
else:
q_min = quality
quality = q_min + (q_max - q_min) // 2
请注意,函数save_file不是为了简洁而提供的,它的伪实现可以是:
import math
def save_file(quality):
return int(math.sqrt(quality))*100
如何减少上述函数收敛到有效解所需的周期数
您可以尝试执行如您所述的二进制搜索功能,并将结果保存在字典中,以便下一次迭代时,它将检查文件大小质量是否已按如下方式计算:
请注意,每个图像都有不同的尺寸、颜色深度、格式等,因此您可能会得到一系列结果,我建议您使用它并在影响最大的属性中创建子关键点,例如:
您可以使用某种简单的ML(机器学习)方法。给定的列车模型:
因为输入将产生您所寻求的最佳质量,或者至少缩小搜索范围,以便您需要2-3次迭代,而不是6次
因此,您必须收集培训(和验证)数据,培训简单快速的模型(应该比
save_file
更快)我认为这是尽可能快地确定质量的最佳方法,但需要大量工作(特别是如果您没有ML方面的经验)
相关问题 更多 >
编程相关推荐