import re
from pathlib import Path
from typing import Union, Optional
from uuid import uuid4
from PIL import Image
import requests
def convert_ico(source: Union[str, Path], dist: Optional[str] = None, size: int = 128):
if size > 256:
size = (256, 256)
else:
size = (size, size)
source = source if isinstance(source, Path) else Path(source)
dist = dist if dist is not None else source.with_suffix(".ico")
img = Image.open(source)
if img.size[0] != img.size[1]:
min_side = min(img.size)
img = img.resize((min_side, min_side))
if any((v0 < v1 for v0, v1 in zip(img.size, size))):
min_side = min(img.size)
size = (min_side, min_side)
Image.open(source).save(
dist, sizes=[size]
)
return dist
def download_image(url: str, save_name: str = None):
response = requests.get(
url
)
response.raise_for_status()
if content_type := response.headers.get("content-type"):
type_, suffix = re.match(r"(.*)/(.*)", content_type).groups()
else:
type_, suffix = "image", "jpg"
save_name = Path(save_name) if save_name is not None else Path(uuid4().hex + "." + suffix)
save_name = save_name.with_suffix("." + suffix)
with open(save_name, "wb") as fp:
fp.write(response.content)
return save_name
if __name__ == '__main__':
image = download_image(
"https://pic1.zhimg.com/v2-42d0dca8a477d75127d48f775579ee3d_1440w.jpg?source=172ae18b"
)
convert_ico(image, size=256)
图片转换为Ico格式
于 2022-03-03 20:10:15 首次发布