当前位置: 首页 > news >正文

livp文件使用python转换为heic或jpeg格式

livp是苹果手机的实况照片格式,livp即(Live Photos)。文件包含一张静态图片,以及一段1.5秒的短视频。但该格式并不通用,在WINDOWS电脑上不能直接查看,给后续的处理带来不便,经常需要转换为JPG/JPEG格式。

1 直接查看

文件本质上是ZIP格式,把后缀名改成zip即可解压缩内容。如将自己的图片 2024-12-13 133721.livp 重命名为2024-12-13 133721.zip 后,显示内容如下:

在这里插入图片描述
但问题又来了:

  • HEIC格式在iOS设备上表现出色,但是它并不被所有设备所支持。但至少为后续的处理带来了可能。
  • heic文件名与初始的文件名不一致,不能保留最初文件名信息,文件多了容易混淆

2 处理思路

由于livp是zip文件,可以直接用python自带的zipfile包,单独取出HEIC文件,重命名为与原文件一致的名称,最后转换为JPEG即可。
所需要的库:

  • zipfile: python自带
  • PIL/pillow: 处理图片
  • pillow-heif:处理heif文件
pip install pillow pillow-heif

3 livp转heic

如果不需要指定目标文件名,自动转换为与livp同名的heic文件。
源文件:test.livp
目标文件:out/test.heic

import zipfile
import os
# input_file可以不用修改livp后缀,直接使用
def livp_to_heic(input_file,target_directory="./out"):base_name=os.path.basename(input_file) #获取含扩展名的文件名    with zipfile.ZipFile(input_file,"r") as files:for file in files.namelist():if file.endswith(".heic"):extracted_file=files.extract(file,target_directory)target_file=f"{target_directory}/{base_name[:-5]}.heic"os.rename(extracted_file,target_file)# 返回目标文件return target_file                

测试:

livp_file="test.livp"
livp_to_heic(livp_file)

生成out目录并输出文件:

在这里插入图片描述

4 heic转为jpg文件

from PIL import Image
import pillow_heifdef heic_to_jpg(input_file, output_file,remove_input_file=False):heif_file = pillow_heif.read_heif(input_file)image = Image.frombytes(heif_file.mode, heif_file.size, heif_file.data,"raw",heif_file.mode,heif_file.stride,)image.save(output_file, "JPEG")if remove_input_file:os.remove(input_file)

测试:

input_file='./out/test.heic'
target_file="./out/test.jpg"
heic_to_jpg(input_file,target_file)

5 批量将livp文件转为jpg/jpeg文件

使用glob库遍历文件,先转为heic,再转换为jpg


import globdef livp_to_jpg(path="./*.livp"):for file in glob.glob(path):heic_file=livp_to_heic(file)target_file=heic_file.replace(".heic",".jpg")heic_to_jpg(heic_file,target_file)

6 所有代码

import zipfile
import os
from PIL import Image
import pillow_heif
import globdef livp_to_heic(input_file,target_directory="./out"):base_name=os.path.basename(input_file) #获取含扩展名的文件名    with zipfile.ZipFile(input_file,"r") as files:for file in files.namelist():if file.endswith(".heic"):extracted_file=files.extract(file,target_directory)target_file=f"{target_directory}/{base_name[:-5]}.heic"os.rename(extracted_file,target_file)# 返回目标文件return target_filedef heic_to_jpg(input_file, output_file,keep_heic=False):heif_file = pillow_heif.read_heif(input_file)image = Image.frombytes(heif_file.mode, heif_file.size, heif_file.data,"raw",heif_file.mode,heif_file.stride,)image.save(output_file, "JPEG")if not keep_heic:os.remove(input_file)     def livp_to_jpg(folder="./",keep_heic=False):for file in glob.glob(os.path.join(folder,"*.livp")):        heic_file=livp_to_heic(file)target_file=heic_file.replace(".heic",".jpg")heic_to_jpg(heic_file,target_file,keep_heic)     

使用:

# 传入livp参数目录,并指定是否保留中间文件
livp_to_jpg("d:/download",keep_heic=False)

相关文章:

  • k8s node cgroup 泄露如何优化?
  • 深入理解 Java 观察者模式:原理、实现与应用
  • 【开发工具】Window安装WSL及配置Vscode获得Linux开发环境
  • npm install下载插件无法更新package.json和package-lock.json文件的解决办法
  • Android组件化 -> Debug模式下,本地构建module模块的AAR和APK
  • 三极管偏置电路分析
  • 51单片机入门教程——AT24C02(I2C 总线)
  • 在PBiCGStab(Preconditioned Bi-Conjugate Gradient Stabilized)算法中处理多个右端项的block版本
  • Github Action部署node项目
  • 论文阅读笔记——ROBOGROUND: Robotic Manipulation with Grounded Vision-Language Priors
  • 一个基于Asp.Net Core + Angular + Bootstrap开源CMS系统
  • 【离线安装python包的方法】
  • Nginx 安全防护与 HTTPS 部署
  • 【基础】Python包管理工具uv使用教程
  • Linux远程管理
  • HHsuite3 的 HHblits 和 HHsearch比较
  • 【上位机——MFC】单文档和多文档视图架构
  • TestStand API 简介
  • 猿人学web端爬虫攻防大赛赛题第7题——动态字体,随风漂移
  • 本地文件批量切片处理与大模型精准交互系统开发指南
  • 应对美政策调整:中国重在开放与创新,维护好数据主权
  • 世界银行最新营商环境体检单:59个测评点,上海22项达全球最优水平
  • 虚构医药服务项目、协助冒名就医等,北京4家医疗机构被处罚
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • 北美票房|“雷霆”开画票房比“美队4”低,但各方都能接受
  • 五一车市消费观察:政策赋能、企业发力,汽车消费火热