帮我写个图片压缩方法,要求对内存使用最低,避免内存泄漏,及时释放内存
时间: 2024-03-09 12:47:57 浏览: 49
好的,以下是一个简单的图片压缩方法:
```python
import cv2
def compress_image(image_path, quality=50):
# 读取图片
img = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
# 获取图片大小
img_size = img.shape[0] * img.shape[1]
# 计算压缩比例
compress_ratio = quality / 100.0
# 计算压缩后图片大小
compressed_img_size = int(img_size * compress_ratio)
# 压缩图片
ret, buf = cv2.imencode('.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), quality])
compressed_img = buf.tobytes()
# 判断压缩后图片大小是否小于原图大小,如果是则返回压缩后图片,否则返回原图
if len(compressed_img) < compressed_img_size:
return compressed_img
else:
return img.tobytes()
```
这个方法使用了 OpenCV 库来读取和压缩图片。它接受一个图片路径和一个质量参数,质量参数越高,图片质量越好,压缩比例越小。方法首先读取图片,然后计算压缩比例,再根据压缩比例计算出压缩后图片的大小。接着使用 OpenCV 的 `cv2.imencode` 函数将图片压缩成 JPEG 格式,并将压缩后的图片转换成字节数组。最后,方法判断压缩后图片大小是否小于原图大小,如果是则返回压缩后图片的字节数组,否则返回原图的字节数组。这个方法使用的内存非常少,因为它只读取了一个图片文件,并且在压缩完成后立即释放了内存。
阅读全文