Module pywander.image.convert_image
Functions
def convert_image(input_img,
outputformat='png',
dpi=150,
outputdir='',
outputname='',
overwrite=True,
transparent=False)-
Expand source code
def convert_image(input_img, outputformat='png', dpi=150, outputdir='', outputname='', overwrite=True, transparent=False): """ - intput_img 输入图片 - outputformat - dpi 输出图片dpi - overwrite 图片是否覆写 - outputname 输出图片名 带后缀 - output_img_name 输出图片名 不带后缀 本函数若图片转换成功则返回目标在系统中的路径,否则返回None。 文件basedir路径默认和input_img相同 """ input_img = os.path.abspath(input_img) outputdir = os.path.abspath(outputdir) if not os.path.exists(outputdir): mkdirs(outputdir) img_name, img_ext = os.path.splitext(os.path.basename(input_img)) if not outputname: outputname = img_name + '.{}'.format(outputformat) output_img_name = img_name else: output_img_name, ext = os.path.splitext(outputname) if not ext: outputname = output_img_name + '.{}'.format(outputformat) elif ext != outputformat: raise Exception( 'outputname ext is not the same as the outputformat') try: if img_ext[1:] in pillow_support and outputformat in pillow_support: return convert_image_by_pillow(input_img, outputdir, output_img_name, outputformat=outputformat, overwrite=overwrite) elif img_ext[1:] in ['svg', 'svgz'] and outputformat in ['png', 'pdf', 'ps', 'eps']: return convert_image_by_inkscape(input_img, outputdir, output_img_name, outputformat=outputformat, dpi=dpi, overwrite=overwrite) elif img_ext[1:] in ['pdf'] and outputformat in ['png', 'jpeg', 'ps', 'eps', 'svg']: return convert_image_by_pdftocairo(input_img, outputdir, output_img_name, outputname=outputname, outputformat=outputformat, dpi=dpi, overwrite=overwrite, transparent=transparent) except PillowProcessError as e: logger.error(e) except InkscapeProcessError as e: logger.error(e) except PdftocairoProcessError as e: logger.error(e) return None
- intput_img 输入图片
- outputformat
- dpi 输出图片dpi
- overwrite 图片是否覆写
- outputname 输出图片名 带后缀
- output_img_name 输出图片名 不带后缀
本函数若图片转换成功则返回目标在系统中的路径,否则返回None。 文件basedir路径默认和input_img相同
def convert_image_by_inkscape(input_img, outputdir, output_img_name, outputformat='png', overwrite=True, dpi=150)
-
Expand source code
def convert_image_by_inkscape(input_img, outputdir, output_img_name, outputformat='png', overwrite=True, dpi=150): output_img = detect_output_file_exist(outputdir, output_img_name, outputformat, overwrite) if not output_img: return None if input_img == output_img: raise FileExistsError inkscape_command = get_command_path('inkscape') process_cmd = [inkscape_command, f'--export-type={outputformat}', '-d', str(dpi), input_img] logger.debug(f'start call cmd {process_cmd}') subprocess.check_call(process_cmd) return output_img
def convert_image_by_pdftocairo(input_img,
outputdir,
output_img_name,
outputname='',
outputformat='png',
overwrite=True,
dpi=150,
transparent=False)-
Expand source code
def convert_image_by_pdftocairo(input_img, outputdir, output_img_name, outputname='', outputformat='png', overwrite=True, dpi=150, transparent=False): """ pdftocairo对中文名文件支持不太好,先输出到临时文件,再更改名字 """ output_img = detect_output_file_exist(outputdir, output_img_name, outputformat, overwrite) if not output_img: return None if not shutil.which('pdftocairo'): raise PdftocairoProcessError("pdftocairo command not found.") cur_dir = os.path.abspath(os.curdir) os.chdir(outputdir) map_dict = {i: '-{}'.format(i) for i in ['png', 'pdf', 'ps', 'eps', 'jpeg', 'svg']} out_flag = map_dict[outputformat] temp_out_name = 'temp_' + random_md5(limit=10) temp_out_filename = f'{temp_out_name}.{outputformat}' if outputformat in ['png', 'jpeg']: # png jpeg without ext so use the output_img_name process_cmd = ['pdftocairo', out_flag, '-singlefile', '-r', str(dpi), input_img, temp_out_name] if transparent and outputformat == 'png': process_cmd.insert(2, '-transp') logger.debug(f'start call cmd {process_cmd}') subprocess.check_call(process_cmd) else: process_cmd = ['pdftocairo', out_flag, '-r', str(dpi), input_img, temp_out_filename] if transparent and outputformat == 'tiff': process_cmd.insert(2, '-transp') logger.debug(f'start call cmd {process_cmd}') subprocess.check_call(process_cmd) if overwrite: os.replace(temp_out_filename, output_img) else: os.rename(temp_out_filename, output_img) os.chdir(cur_dir) return output_img
pdftocairo对中文名文件支持不太好,先输出到临时文件,再更改名字
def convert_image_by_pillow(input_img, outputdir, output_img_name, outputformat='png', overwrite=True)
-
Expand source code
def convert_image_by_pillow(input_img, outputdir, output_img_name, outputformat='png', overwrite=True): """ """ output_img = detect_output_file_exist(outputdir, output_img_name, outputformat, overwrite) if not output_img: return None if input_img == output_img: raise FileExistsError try: img = Image.open(input_img) img.save(output_img) logger.info('{0} saved.'.format(output_img)) return output_img except FileNotFoundError as e: raise PillowProcessError( f"process image: {input_img} raise FileNotFoundError") except IOError: raise PillowProcessError(f"process image: {input_img} raise IOError")