Files
icnsutil/icnsutil/autosize/SVGResizer.py
2023-03-18 12:29:35 +01:00

46 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import platform
from shutil import which
from subprocess import run, PIPE, DEVNULL
from .ImageResizer import SVGResizer
# --------------------------------------------------------------------
# Vector based image resizer
# --------------------------------------------------------------------
class ReSVG(SVGResizer):
''' resvg (https://github.com/RazrFalcon/resvg/) '''
@staticmethod
def isSupported() -> bool:
ReSVG._exe = which('resvg')
return True if ReSVG._exe else False
def resize(self, size: int, fname_out: str) -> None:
run([self.exe, '-w', str(size), self.fname, fname_out])
class ChromeSVG(SVGResizer):
''' Google Chrome (macOS only) '''
@staticmethod
def isSupported() -> bool:
if platform.system() == 'Darwin':
ret = run(['defaults', 'read', 'com.google.Chrome',
'LastRunAppBundlePath'], stdout=PIPE).stdout.strip()
app_path = ret.decode('utf8') or '/Applications/Google Chrome.app'
app_path += '/Contents/MacOS/Google Chrome'
if os.path.isfile(app_path):
ChromeSVG._exe = app_path
return True
return False
def resize(self, size: int, fname_out: str) -> None:
run([self.exe, '--headless', '--disable-gpu', '--hide-scrollbars',
'--force-device-scale-factor=1', '--default-background-color=0',
'--window-size={0},{0}'.format(self.preferred_size),
'--screenshot="{}"'.format(self.fname), self.fname],
stderr=DEVNULL)