Python3 使用pli优化图片大小,相机或手机拍图片根据exif旋转、纠正方向

简介: 首先安装 pip install pillow 如果报错,请根据报错的信息去搜索一下,一般都能得到解决,未找到请升级pip python -m pip install --upgrade pip 或者 pip install --upgrade pip 那么写个方法 from PIL import.

首先安装

pip install pillow

如果报错,请根据报错的信息去搜索一下,一般都能得到解决,未找到请升级pip

python -m pip install --upgrade pip

或者

pip install --upgrade pip

那么写个方法

from PIL import Image,ExifTags

#定义保存图片都路径
def get_outfile(infile, outfile):
  if outfile:
  return outfile
  dir, suffix = os.path.splitext(infile)
  outfile = '{}-cover{}'.format(dir, suffix)
  return outfile
 
#缩小图片大小,保持原始宽高
def compress_image(infile, outfile='', kb=3200, step=5, quality=80):
  o_size = os.path.getsize(infile) / 1024
  if o_size <= kb:
    return False
  outfile = self.get_outfile(infile, outfile)
  while o_size > kb:
    img = Image.open(infile)
    #相机或手机拍摄图片需要根据exif旋转角度
    try:
      for orientation in ExifTags.TAGS.keys():
        if ExifTags.TAGS[orientation] == 'Orientation': break
      exif = dict(img._getexif().items())
      if exif[orientation] == 3:
        img = img.rotate(180, expand=True)
      elif exif[orientation] == 6:
        img = img.rotate(270, expand=True)
      elif exif[orientation] == 8:
        img = img.rotate(90, expand=True)
    except:
      pass
    img.save(outfile, quality=quality)
  if quality - step < 0:
  break
  quality -= step
  o_size = os.path.getsize(outfile) / 1024
  return outfile
compress_image(infile, outfile='', kb=3200, step=5, quality=80)
infile : 原始图片路径
outfile: 生成图片保存路径
kb     : 图片压缩上限,单位kb
step   : 每次压缩质量,
quality: 图片质量,jpg特有,最高为100的质量

使用

small_path = compress_image(image_path)
if not small_path:
small_path = image_path

在某个项目中用到,就记录一下吧~特别是碰到图片上传后改变了方向的,特别郁闷,所以找到了解决方案

img = Image.open(infile)
    #相机或手机拍摄图片需要根据exif旋转角度
    try:
      for orientation in ExifTags.TAGS.keys():
        if ExifTags.TAGS[orientation] == 'Orientation': break
      exif = dict(img._getexif().items())
      if exif[orientation] == 3:
        img = img.rotate(180, expand=True)
      elif exif[orientation] == 6:
        img = img.rotate(270, expand=True)
      elif exif[orientation] == 8:
        img = img.rotate(90, expand=True)
    except:
      pass
    img.save(outfile, quality=100)
目录
相关文章
|
29天前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
101 0
|
10天前
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python实现深度学习模型:智能家电控制与优化
使用Python实现深度学习模型:智能家电控制与优化
55 22
使用Python实现深度学习模型:智能家电控制与优化
|
4天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
17 4
|
10天前
|
并行计算 算法 Java
优化Python数据处理性能的策略
在数据密集型应用中,Python常因其解释性语言的特性而面临性能瓶颈。本文探讨了提升Python数据处理性能的几种策略,包括优化数据结构的选择、使用高效的库以及应用并行处理技术。通过具体示例和代码演示,读者将了解如何在实际开发中应用这些策略,从而显著提升数据处理速度。
|
29天前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
10天前
|
存储 并行计算 大数据
优化Python数据处理性能的最佳实践
在数据科学和大数据时代,优化Python数据处理性能变得至关重要。通过探讨数据处理瓶颈、内存管理、并行计算以及高效库的使用,本篇文章旨在提供切实可行的最佳实践,以帮助开发者提升数据处理效率。
|
14天前
|
JSON 监控 数据挖掘
Python I/O管理新篇章:优化你的程序,让数据流动更顺畅
【9月更文挑战第13天】在数据驱动时代,Python因其在数据分析、科学计算及Web开发中的广泛应用而备受青睐。本文探讨了Python I/O管理的关键方面,包括理解I/O瓶颈、使用缓冲技术、并发与异步I/O、高效数据序列化及监控调试。通过具体示例,展示了如何优化文件读写和网络通信,提高程序性能。掌握这些技能,可使数据在程序中流动更加顺畅。
31 3
|
25天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能物流路径优化
使用Python实现智能物流路径优化
46 1
|
29天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
55 1
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能交通信号优化
使用Python实现深度学习模型:智能交通信号优化
96 9