我正在尝试使用Python将HEIC转换为JPG。关于这个主题的其他答案都使用了pyheif,但我在Windows上,而pyheif不支持Windows。你有什么建议吗?我目前正在尝试使用pillow。
我正在尝试使用Python将HEIC转换为JPG。关于这个主题的其他答案都使用了pyheif,但我在Windows上,而pyheif不支持Windows。你有什么建议吗?我目前正在尝试使用pillow。
以下代码将图像转换并保存为PNG格式
from PIL import Image
import pillow_heif
heif_file = pillow_heif.read_heif("HEIC_file.HEIC")
image = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
)
image.save("./picture_name.png", format("png"))
heif_file.data
更改为heif_file.data.tobytes()
,然后它就可以工作了。 - undefined为我工作。
from PIL import Image
import pillow_heif
pillow_heif.register_heif_opener()
img = Image.open('c:\image.HEIC')
img.save('c:\image_name.png', format('png'))
如果您需要使用Pillow处理图像,请使用open_heif或PIL.Image.open()。
pillow-heif支持惰性数据加载。
read_heif和read在包含多个图像的文件中运行缓慢,会在调用过程中解码所有图像。
附言:我是pillow-heif的作者。
from PIL import Image
import pillow_heif
heif_file = pillow_heif.read(r"E:\image\20210914_150826.heic")
image = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
)
image.save(r"E:\image\test.png", format("png"))
import io
from PIL import Image
import pillow_heif
from werkzeug.datastructures import FileStorage
class Converter:
def convert_heic_to_jpeg(self, file):
# Check if file is a .heic or .heif file
if file.filename.endswith(('.heic', '.heif', '.HEIC', '.HEIF')):
# Open image using PIL
# image = Image.open(file)
heif_file = pillow_heif.read_heif(file)
image = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
)
# Convert to JPEG
jpeg_image = image.convert('RGB')
# Save JPEG image to memory temp_img
temp_img = io.BytesIO()
jpeg_image.save(temp_img, format("jpeg"))
# Reset file pointer to beginning of temp_img
temp_img.seek(0)
# Create a FileStorage object
file_storage = FileStorage(temp_img, filename=f"{file.filename.split('.')[0]}.jpg")
# Set the mimetype to "image/jpeg"
file_storage.headers['Content-Type'] = 'image/jpeg'
return file_storage
else:
raise ValueError("File must be of type .heic or .heif")
import os
from PIL import Image
import pillow_heif
def convert_heic_to_jpeg(heic_path, jpeg_path):
img = Image.open(heic_path)
img.save(jpeg_path, format='JPEG')
def convert_all_heic_to_jpeg(input_folder, output_folder):
# Register HEIF opener with Pillow
pillow_heif.register_heif_opener()
# Create output folder if it doesn't exist
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# List all files in input folder
for filename in os.listdir(input_folder):
# Check if file is a HEIC file
if filename.endswith(".heic") or filename.endswith(".HEIC"):
# Build full path to input and output file
heic_path = os.path.join(input_folder, filename)
jpeg_filename = f'{os.path.splitext(filename)[0]}.jpg'
jpeg_path = os.path.join(output_folder, jpeg_filename)
# Convert HEIC to JPEG
convert_heic_to_jpeg(heic_path, jpeg_path)
# Example usage
input_folder = 'images'
output_folder = 'converted'
convert_all_heic_to_jpeg(input_folder, output_folder)