more conversion handling
This commit is contained in:
parent
1f118b1dc9
commit
ace6f641b6
|
@ -3,6 +3,7 @@ from pathlib import Path
|
||||||
|
|
||||||
import PIL
|
import PIL
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
|
||||||
def random_file_width(base_path: Path):
|
def random_file_width(base_path: Path):
|
||||||
|
@ -25,3 +26,10 @@ def is_png(file_path):
|
||||||
except PIL.UnidentifiedImageError as e:
|
except PIL.UnidentifiedImageError as e:
|
||||||
# tqdm.write(str(e))
|
# tqdm.write(str(e))
|
||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
|
|
||||||
|
def convert(file_path):
|
||||||
|
img = Image.open(file_path)
|
||||||
|
if img.format != 'PNG':
|
||||||
|
img.save(file_path, format='PNG')
|
||||||
|
tqdm.write(f'Converted {file_path} from {img.format} to PNG')
|
||||||
|
|
|
@ -6,7 +6,7 @@ from PIL import Image
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from pkg.proxies import PROXIES
|
from pkg.proxies import PROXIES
|
||||||
from .image import is_png
|
from .image import convert, is_png
|
||||||
|
|
||||||
|
|
||||||
def del_path(p: Path):
|
def del_path(p: Path):
|
||||||
|
@ -23,11 +23,17 @@ def download_tile(task):
|
||||||
output_path: Path = output / f"{row}_{col}.png"
|
output_path: Path = output / f"{row}_{col}.png"
|
||||||
if output_path.exists():
|
if output_path.exists():
|
||||||
valid_png_file, image_type = is_png(output_path)
|
valid_png_file, image_type = is_png(output_path)
|
||||||
if not valid_png_file:
|
if convert_to_png and image_type != 'PNG':
|
||||||
|
# The image was read sucessfully by PIL but it's in the wrong format.
|
||||||
|
convert(output_path)
|
||||||
|
if not is_png(output_path):
|
||||||
|
tqdm.write(f'PNG conversion for {output_path} failed. Deleting and retrying...')
|
||||||
|
corrupted_image = True
|
||||||
|
elif not valid_png_file:
|
||||||
# We will re-download the image. Don't need to delete it, just overwrite it.
|
# We will re-download the image. Don't need to delete it, just overwrite it.
|
||||||
# del_path(output_path)
|
# del_path(output_path)
|
||||||
corrupted_image = True
|
corrupted_image = True
|
||||||
tqdm.write(f'Cannot identify image file: "{output_path}" (is {image_type}), deleting and retrying...')
|
tqdm.write(f'Bad image file: "{output_path}" (is format: {image_type}), deleting and retrying...')
|
||||||
else:
|
else:
|
||||||
return row, col, 'exist'
|
return row, col, 'exist'
|
||||||
tile_url = f"{base_url}/{row}/{col}".replace('//', '/').replace(':/', '://')
|
tile_url = f"{base_url}/{row}/{col}".replace('//', '/').replace(':/', '://')
|
||||||
|
@ -40,10 +46,8 @@ def download_tile(task):
|
||||||
f.write(response.content)
|
f.write(response.content)
|
||||||
|
|
||||||
if convert_to_png:
|
if convert_to_png:
|
||||||
img = Image.open(output_path)
|
convert(output_path)
|
||||||
if img.format != 'PNG':
|
corrupted_image = True # force a re-check
|
||||||
img.save(output_path, format='PNG')
|
|
||||||
tqdm.write(f'Converted {output_path} from {img.format} to PNG')
|
|
||||||
|
|
||||||
# Recheck the PNG if it was corrupted.
|
# Recheck the PNG if it was corrupted.
|
||||||
if corrupted_image and not is_png(output_path):
|
if corrupted_image and not is_png(output_path):
|
||||||
|
|
Loading…
Reference in New Issue