在window下用python把heic格式的照片转成jpg

iphone相机提供了两种保存照片的方式,一种是“高效”,另外一种是“兼容性最佳”。

我们可以通过

设置----》相机----》格式

就可以进入下面这个界面来设置


IMG_2559.PNG

那么,我们应该怎么来设置呢?来自apple社区有相关的讨论

我想问问,设置-相机-格式,你们选择“高效”,还是 "兼容性最佳" ?我发现高效的格式,图片质量非常大,同一角度,
高效格式6m兼容性最佳 2m
有时是高效格式11m兼容性最佳 6m
至于图片质量,我不专业,我个人觉得差别不大,但是图片大小相差巨大,细节地方,放大到很大才发现差别。你们的怎么看?

有这样答的,感觉很详细了

一般来说,建议选择“高效”。“高效”所指的HEIF(图片)、HEVC(视频)格式更为先进,特别是它们的压缩算法更好,能显著减小文件体积、同时维持质量相同甚至更好。几年前刚开始推广它们的时候,会出现兼容性问题(例如一些旧版本Windows、iOS、macOS等的内置软件无法正确打开,需要借助第三方软件),但现在几乎可以不必考虑。PS:并不是说保持同一角度拍摄,图片就应该一样大;压缩算法对图像内容的“细微”变化非常敏感。

可以下载免费的软件“HEIF-Utility”,但这个软件在转换照片的时候,会丢弃EXIF信息(就是我们照相时的时间,照相时的GPS,照相的设备信息等),这些信息其实是比较重要的,比如照片实际拍摄时间如果没有了,我们就不知道这个照片时间拍摄时间了,一些智能分类软件也没有办法按照时间进行分类。

在网上又找了一些其他的软件,但都是收费的,或者转换完会丢弃EXIF。自己就写了一个python脚本来处理。

由于是window系统,在网上搜了一下,大部分都是“import pyheif”,而这个只能在MAC,或者Linux系统下运行,后又发现“pillow_heif ”是可以在window下作用的,于是按照“import pillow_heif ”,进行了实现,并且可以正确保持照片的EXIF信息。

环境,windows, python3,如果没有安装pillow_heif或piexif的话

python3 -m pip install --upgrade pip
python3 -m pip install pillow-heif
python3 -m pip install --upgrade Pillow
pip install piexif
sudo pip3 install glob3

glob这个不同的python版本对应的名字不一样,要切记。
python 2.7:

sudo pip install glob2

python 3.5:

sudo pip install glob3

from PIL import Image
import pillow_heif
import piexif
from glob import glob
import sys

# pillow_heif.register_heif_opener()
 
def heic_to_jpg(img_path,save_path):
    name = (img_path.split('\\')[-1]).split('.')[0]
    # open the image file
    heif_file = pillow_heif.read_heif(img_path)

    #create the new image
    image = Image.frombytes(
    heif_file.mode,
    heif_file.size,
    heif_file.data,
    "raw",
    heif_file.mode,
    heif_file.stride,
    )
    # PIL rotates the image according to exif info, so it's necessary to remove the orientation tag otherwise the image will be rotated again (1° time from PIL, 2° from viewer).
    exif_dict = piexif.load(heif_file.info['exif'])
    exif_dict['0th'][274] = 0
    exif_bytes = piexif.dump(exif_dict)
    image.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
files = glob(r"D:/NEW/12/2022/12/04/*.heic") #读取全部heic文件地址   
save_path = "D:/NEW/12/2022/12/04/dst/" #储存地址
for img in files:
    print("Conversion process: ", img)
    sys.stdout.flush()
    heic_to_jpg(img,save_path)

print('--------------finish-------------')

python - HEIC to JPEG conversion with metadata - Stack Overflow

还可以同时调节下面这些参数

"""
1、对比度:白色画面(最亮时)下的亮度除以黑色画面(最暗时)下的亮度;
2、色彩饱和度::彩度除以明度,指色彩的鲜艳程度,也称色彩的纯度;
3、色调:向负方向调节会显现红色,正方向调节则增加黄色。适合对肤色对象进行微调;
4、锐度:是反映图像平面清晰度和图像边缘锐利程度的一个指标。
"""

from PIL import Image
from PIL import ImageEnhance
#读取图片,如果已经使用了Image.frombytes,就不需要这步
     image = Image.open(image_path)
 
     #变亮
     #亮度增强,增强因子为0.0将产生黑色图像;为1.0将保持原始图像。
     enh_bri = ImageEnhance.Brightness(image)
     brightness = 1.5
     image_brightened1 = enh_bri.enhance(brightness)
     image_brightened1.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     #变暗
     enh_bri = ImageEnhance.Brightness(image)
     brightness = 0.8
     image_brightened2 = enh_bri.enhance(brightness)
     image_brightened2.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     #色度,增强因子为1.0是原始图像
     # 色度增强
     enh_col = ImageEnhance.Color(image)
     color = 1.5
     image_colored1 = enh_col.enhance(color)
     image_colored1.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     # 色度减弱
     enh_col = ImageEnhance.Color(image)
     color = 0.8
     image_colored2 = enh_col.enhance(color)
     image_colored2.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     #对比度,增强因子为1.0是原始图片
     # 对比度增强
     enh_con = ImageEnhance.Contrast(image)
     contrast = 1.5
     image_contrasted1 = enh_con.enhance(contrast)
     image_contrasted1.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     # 对比度减弱
     enh_con = ImageEnhance.Contrast(image)
     contrast = 0.8
     image_contrasted2 = enh_con.enhance(contrast)
     image_contrasted2.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     # 锐度,增强因子为1.0是原始图片
     # 锐度增强
     enh_sha = ImageEnhance.Sharpness(image)
     sharpness = 3.0
     image_sharped1 = enh_sha.enhance(sharpness)
     image_sharped1.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg
 
     # 锐度减弱
     enh_sha = ImageEnhance.Sharpness(image)
     sharpness = 0.8
     image_sharped2 = enh_sha.enhance(sharpness)
     image_sharped2.save(save_path+name+".jpg", "JPEG", exif=exif_bytes, quality=85) #默认转成jpg

python中使用PIL模块中的ImageEnhance进行图片数据增强_pursuit_zhangyu的博客-CSDN博客_pil图像增强

单独调整亮度

im1 = Image.open("angelababy.jpg")
im2 = im1.point(lambda p: p * 0.5)
im2.save("angelababy2.jpg")

python实现图片变亮或变暗的方法分析_googler_offer的博客-CSDN博客_python图像变暗

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容