kopia lustrzana https://github.com/dnet/pySSTV
Add to scale the picture proportionally to the mode size (fill the vacant part with black pixels) (#26)
rodzic
c454aa3a4b
commit
b22e81e65f
|
@ -34,6 +34,13 @@ Command line usage
|
|||
--vox add VOX tones at the beginning
|
||||
--fskid FSKID add FSKID at the end
|
||||
--chan CHAN number of channels (default: mono)
|
||||
--resize resize the image to the correct size
|
||||
--keep-aspect-ratio keep the original aspect ratio when resizing
|
||||
(and cut off excess pixels)
|
||||
--keep-aspect keep the original aspect ratio when resizing
|
||||
(not cut off excess pixels)
|
||||
--resample which resampling filter to use for resizing
|
||||
(see Pillow documentation)
|
||||
|
||||
Python interface
|
||||
----------------
|
||||
|
|
|
@ -34,6 +34,8 @@ def main():
|
|||
help='resize the image to the correct size')
|
||||
parser.add_argument('--keep-aspect-ratio', dest='keep_aspect_ratio', action='store_true',
|
||||
help='keep the original aspect ratio when resizing (and cut off excess pixels)')
|
||||
parser.add_argument('--keep-aspect', dest='keep_aspect', action='store_true',
|
||||
help='keep the original aspect ratio when resizing (not cut off excess pixels)')
|
||||
parser.add_argument('--resample', dest='resample', default='lanczos',
|
||||
choices=('nearest', 'bicubic', 'lanczos'),
|
||||
help='which resampling filter to use for resizing (see Pillow documentation)')
|
||||
|
@ -42,14 +44,17 @@ def main():
|
|||
mode = module_map[args.mode]
|
||||
if args.resize and any(i != m for i, m in zip(image.size, (mode.WIDTH, mode.HEIGHT))):
|
||||
resample = getattr(Image, args.resample.upper())
|
||||
if args.keep_aspect_ratio:
|
||||
if args.keep_aspect_ratio or args.keep_aspect:
|
||||
orig_ratio = image.width / image.height
|
||||
mode_ratio = mode.WIDTH / mode.HEIGHT
|
||||
crop = orig_ratio != mode_ratio
|
||||
else:
|
||||
crop = False
|
||||
if crop:
|
||||
if orig_ratio < mode_ratio:
|
||||
t = orig_ratio < mode_ratio
|
||||
if args.keep_aspect:
|
||||
t = orig_ratio > mode_ratio
|
||||
if t:
|
||||
w = mode.WIDTH
|
||||
h = int(w / orig_ratio)
|
||||
else:
|
||||
|
@ -59,6 +64,14 @@ def main():
|
|||
w = mode.WIDTH
|
||||
h = mode.HEIGHT
|
||||
image = image.resize((w, h), resample)
|
||||
if args.keep_aspect:
|
||||
newbg = Image.new('RGB', (mode.WIDTH, mode.HEIGHT))
|
||||
if t:
|
||||
newbg.paste(image, (0, int((mode.HEIGHT/2)-(h/2))))
|
||||
else:
|
||||
newbg.paste(image, (int((mode.WIDTH/2)-(w/2)), 0))
|
||||
image = newbg.copy()
|
||||
crop = False
|
||||
if crop:
|
||||
x = (image.width - mode.WIDTH) / 2
|
||||
y = (image.height - mode.HEIGHT) / 2
|
||||
|
|
Ładowanie…
Reference in New Issue