mirror of
https://github.com/PaiGramTeam/PaiGram.git
synced 2024-11-29 02:57:22 +00:00
🐛 Fix photo invalid dimensions
This commit is contained in:
parent
bc76f6297b
commit
ff66b29240
@ -108,7 +108,8 @@ class Hyperion:
|
|||||||
self.download_image(post_info.post_id, post_info.image_urls[page], page)
|
self.download_image(post_info.post_id, post_info.image_urls[page], page)
|
||||||
for page in range(len(post_info.image_urls))
|
for page in range(len(post_info.image_urls))
|
||||||
]
|
]
|
||||||
result_list = await asyncio.gather(*task_list)
|
result_lists = await asyncio.gather(*task_list)
|
||||||
|
for result_list in result_lists:
|
||||||
for result in result_list:
|
for result in result_list:
|
||||||
if isinstance(result, ArtworkImage):
|
if isinstance(result, ArtworkImage):
|
||||||
art_list.append(result)
|
art_list.append(result)
|
||||||
@ -119,7 +120,7 @@ class Hyperion:
|
|||||||
art_list.sort(key=take_page)
|
art_list.sort(key=take_page)
|
||||||
return art_list
|
return art_list
|
||||||
|
|
||||||
async def download_image(self, art_id: int, url: str, page: int = 0) -> ArtworkImage:
|
async def download_image(self, art_id: int, url: str, page: int = 0) -> List[ArtworkImage]:
|
||||||
filename = os.path.basename(url)
|
filename = os.path.basename(url)
|
||||||
_, file_extension = os.path.splitext(filename)
|
_, file_extension = os.path.splitext(filename)
|
||||||
is_image = bool(file_extension in ".jpg" or file_extension in ".png")
|
is_image = bool(file_extension in ".jpg" or file_extension in ".png")
|
||||||
@ -127,7 +128,7 @@ class Hyperion:
|
|||||||
response = await self.client.get(
|
response = await self.client.get(
|
||||||
url, params=self.get_images_params(resize=2000) if is_image else None, de_json=False
|
url, params=self.get_images_params(resize=2000) if is_image else None, de_json=False
|
||||||
)
|
)
|
||||||
return ArtworkImage(
|
return ArtworkImage.gen(
|
||||||
art_id=art_id, page=page, file_name=filename, file_extension=url.split(".")[-1], data=response.content
|
art_id=art_id, page=page, file_name=filename, file_extension=url.split(".")[-1], data=response.content
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,6 +25,32 @@ class ArtworkImage(BaseModel):
|
|||||||
pass
|
pass
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def gen(*args, **kwargs) -> List["ArtworkImage"]:
|
||||||
|
data = [ArtworkImage(*args, **kwargs)]
|
||||||
|
if data[0].file_extension and data[0].file_extension in ["gif", "mp4"]:
|
||||||
|
return data
|
||||||
|
try:
|
||||||
|
with BytesIO(data[0].data) as stream, Image.open(stream) as image:
|
||||||
|
width, height = image.size
|
||||||
|
crop_height = height
|
||||||
|
crop_num = 1
|
||||||
|
max_height = 10000 - width
|
||||||
|
while crop_height > max_height:
|
||||||
|
crop_num += 1
|
||||||
|
crop_height = height / crop_num
|
||||||
|
new_data = []
|
||||||
|
for i in range(crop_num):
|
||||||
|
slice_image = image.crop((0, crop_height * i, width, crop_height * (i + 1)))
|
||||||
|
bio = BytesIO()
|
||||||
|
slice_image.save(bio, "png")
|
||||||
|
kwargs["data"] = bio.getvalue()
|
||||||
|
kwargs["file_extension"] = "png"
|
||||||
|
new_data.append(ArtworkImage(*args, **kwargs))
|
||||||
|
return new_data
|
||||||
|
except UnidentifiedImageError:
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
class PostInfo(BaseModel):
|
class PostInfo(BaseModel):
|
||||||
_data: dict = PrivateAttr()
|
_data: dict = PrivateAttr()
|
||||||
|
Loading…
Reference in New Issue
Block a user