去除水印需要13秒,不知道为啥很慢,有时候慢到接近30秒

开发
这篇文章主要盘点了一个Python去除水印慢的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

一、前言

前几天在Python白银交流群【顾德猫宁】问了一个Python去除水印慢的问题,问题如下:

下面的代码去除水印需要13秒,麻烦大神帮忙看看,

def delete_watermark(path):
        t = time.time()
        img = Image.open(path)
        width, height = img.size
        for pos in product(range(width), range(height)):
            rgb = img.getpixel(pos)[:3]             
if sum(rgb) >= 255 and sum(rgb) < 600:
                img.putpixel(pos, (0, 0, 0))  # 替换水印,根据背景像素调整
            elif sum(rgb) >= 600:  # 检测浅白色像素,即水印,根据水印类型调整
                img.putpixel(pos, (255, 255, 255))  # 替换水印,根据背景像素调整
        img = img.convert('L')
        print(time.time() - t)

去除水印的原图如下:

图片

去除水印的时间需要13秒,偶尔会2-3秒,不知道为啥很慢,有时候慢到接近30秒。

二、实现过程

这里【此类生物】分享了自己的一个经验,倒是觉得正常,13秒不算很慢。

后来【东哥】问了AI,给出的答案如下:

这段Python代码的目的是去除图像中的水印。代码执行效率受到多种因素的影响,以下是一些可能导致执行时间较长的原因:

  1. 图像大小:如果图像分辨率很高(即宽度和高度很大),则需要处理的像素点数量会大大增加,这将显著增加计算时间。
  2. 循环遍历:代码中使用了一个双层循环来遍历图像的每一个像素点。对于大型图像,这将产生大量的迭代,导致处理时间变长。
  3. getpixelputpixel 方法:这两个方法在每次调用时都会进行磁盘I/O操作,因为它们需要从文件中读取或写入像素数据。频繁的I/O操作会显著降低代码的执行效率。
  4. 条件判断:在每次迭代中,代码都会进行条件判断来决定是否替换像素。这些判断操作会增加额外的处理时间。
  5. 图像转换:在循环结束后,图像被转换成灰度图(img.convert('L'))。这个操作也需要时间,尤其是对于大型图像。
  6. 硬件性能:执行时间还受到计算机硬件性能的影响,包括CPU速度、内存大小和硬盘性能等。
  7. 系统负载:如果系统在运行此脚本时还有其他高负载任务,也可能导致处理速度变慢。

为了提高代码的执行效率,可以考虑以下优化措施:

  • 使用更高效的图像处理库,如Pillow的内部优化可能比基本的PIL库更好。
  • 减少不必要的条件判断,或者预先计算好判断条件。
  • 避免在循环中进行频繁的I/O操作,可以考虑先将图像数据加载到内存中,然后进行处理。
  • 对于大型图像,可以考虑使用多线程或多进程来并行处理不同部分的像素。
  • 如果可能,使用更快速的存储设备,如SSD而不是HDD。

请注意,去除水印可能涉及版权和法律问题。在使用此类代码时,请确保遵守相关法律法规,并尊重原创内容的版权。

图片

看上去这个原因还是很多的,如果能够跑起来的话,建议如果是自己用的话,还是不要先去追求性能了,如果是公司需要,可以跟老板提需求,换个好一些的电脑。

顺利地解决了粉丝的问题。

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一个Python去除水印慢的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

责任编辑:庞桂玉 来源: Python共享之家
相关推荐

2009-09-28 11:20:30

面试

2019-07-12 15:28:41

缓存数据库浏览器

2022-12-12 08:17:29

2019-08-16 16:11:01

消息队列MQ解耦

2023-12-21 14:40:09

Python编程语言

2022-11-02 08:55:43

Gofor 循环存储

2024-03-27 12:35:12

NettygRPCDubbo

2024-03-04 00:00:00

Kubernetes技巧API

2021-08-27 17:00:51

Linux内核

2023-05-22 07:10:38

GPTpromptPerplexity

2022-11-15 11:13:10

域名Linux文件

2020-07-28 08:26:34

WebSocket浏览器

2020-06-12 09:20:33

前端Blob字符串

2017-12-11 15:04:58

404错误HTTP代码

2021-07-14 11:25:12

CSSPosition定位

2010-08-23 09:56:09

Java性能监控

2009-12-10 09:37:43

2011-09-15 17:10:41

2021-02-01 23:23:39

FiddlerCharlesWeb

2020-12-21 09:00:04

MySQL缓存SQL
点赞
收藏

51CTO技术栈公众号