Skip to content

Commit da79403

Browse files
committed
Add Imagemagick 7 compatibility
1 parent ab30e3b commit da79403

File tree

1 file changed

+23
-18
lines changed

1 file changed

+23
-18
lines changed

kicad-diff.py

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@
7676
cur_pcb_ops = cur_sch_ops = None
7777
is_pcb = True
7878
use_poppler = True
79+
# Tools/Compatibility
80+
CONVERT = 'convert'
7981
# Compress SVG files using scour (KiRi mode)
8082
use_scour = False
8183
DEFAULT_LAYER_NAMES = {
@@ -420,9 +422,9 @@ def pdf2png(base_name, blank=False, ref=None):
420422
return sorted(glob(base_name+'-*.png'))
421423
if isfile(source):
422424
if use_poppler:
423-
cmd = 'cat "{}" | pdftoppm -r {} -gray - | convert - "{}"'.format(source, resolution, dest1)
425+
cmd = 'cat "{}" | pdftoppm -r {} -gray - | {} - "{}"'.format(source, resolution, CONVERT, dest1)
424426
else:
425-
cmd = ('convert -density {} "{}" -background white -alpha remove -alpha off -threshold 50% '
427+
cmd = (CONVERT + ' -density {} "{}" -background white -alpha remove -alpha off -threshold 50% '
426428
'-colorspace Gray -resample {} -depth 8 "{}"'.format(resolution*2, source, resolution, dest1))
427429
run_command(['bash', '-c', cmd])
428430
else:
@@ -433,7 +435,7 @@ def pdf2png(base_name, blank=False, ref=None):
433435
# Create a blank file
434436
logger.debug('Blanking '+dest1)
435437
blanked = base_name+'_blanked.png'
436-
cmd = ('convert "{}" -background white -threshold 100% -negate -colorspace Gray "{}"'.format(dest1, blanked))
438+
cmd = (CONVERT + ' "{}" -background white -threshold 100% -negate -colorspace Gray "{}"'.format(dest1, blanked))
437439
run_command(['bash', '-c', cmd])
438440
remove(dest1)
439441
dest1 = blanked
@@ -446,7 +448,7 @@ def pdf2png(base_name, blank=False, ref=None):
446448

447449
def create_no_diff(output_dir):
448450
diff_name = output_dir+sep+'no-diff.png'
449-
cmd = ['convert', '-size', '640x480', '-background', 'white', '-fill', 'black', '-pointsize', '72', '-gravity', 'center',
451+
cmd = [CONVERT, '-size', '640x480', '-background', 'white', '-fill', 'black', '-pointsize', '72', '-gravity', 'center',
450452
'label:No diff', diff_name]
451453
run_command(cmd)
452454
return diff_name
@@ -477,9 +479,9 @@ def create_diff_stereo(old_name, new_name, diff_name, font_size, layer, resoluti
477479
extra_name = extent = ''
478480
text = ' -font helvetica -pointsize '+font_size+' -draw "text 10,'+font_size+' \''+adapt_name(name_layer)+extra_name+'\'" '
479481
command = ['bash', '-c',
480-
'( convert "'+new_name+'"'+extent+' miff:- ;' +
481-
' convert "'+old_name+'"'+extent+' miff:- ) | ' +
482-
r'convert - \( -clone 0-1 -compose darken -composite \) ' +
482+
'( '+CONVERT+' "'+new_name+'"'+extent+' miff:- ; ' + CONVERT +
483+
' "'+old_name+'"'+extent+' miff:- ) | ' + CONVERT +
484+
r' - \( -clone 0-1 -compose darken -composite \) ' +
483485
text+' -channel RGB -combine "'+diff_name+'"']
484486
run_command(command)
485487
include = True
@@ -505,18 +507,18 @@ def create_diff_stereo_colored(old_name, new_name, diff_name, font_size, layer,
505507
with NamedTemporaryFile(mode='w', prefix='added', suffix='.png', delete=False) as f:
506508
added = f.name
507509
command = ['bash', '-c',
508-
'( convert -threshold 50% "'+new_name+'"'+extent+' miff:- ;' +
509-
' convert -threshold 50% -negate "'+old_name+'"'+extent+' miff:- ) | ' +
510-
r'convert - -compose darken -composite -negate -fill "'+args.removed_2color+'" ' +
510+
'( '+CONVERT+' -threshold 50% "'+new_name+'"'+extent+' miff:- ; ' + CONVERT +
511+
' -threshold 50% -negate "'+old_name+'"'+extent+' miff:- ) | ' + CONVERT +
512+
' - -compose darken -composite -negate -fill "'+args.removed_2color+'" ' +
511513
' -opaque black -transparent white "'+removed+'"']
512514
run_command(command)
513515
command = ['bash', '-c',
514-
'( convert -threshold 50% -negate "'+new_name+'"'+extent+' miff:- ;' +
515-
' convert -threshold 50% "'+old_name+'"'+extent+' miff:- ) | ' +
516-
r'convert - -compose darken -composite -negate -fill "'+args.added_2color+'" ' +
516+
'( '+CONVERT+' -threshold 50% -negate "'+new_name+'"'+extent+' miff:- ;' +
517+
' ' + CONVERT + ' -threshold 50% "'+old_name+'"'+extent+' miff:- ) | ' +
518+
CONVERT + ' - -compose darken -composite -negate -fill "'+args.added_2color+'" ' +
517519
' -opaque black -transparent white "'+added+'"']
518520
run_command(command)
519-
run_command(['convert', old_name, added, '-composite', removed, '-composite',
521+
run_command([CONVERT, old_name, added, '-composite', removed, '-composite',
520522
'-font', 'helvetica', '-pointsize', font_size, '-draw',
521523
"text 10,"+font_size+" '"+adapt_name(name_layer)+extra_name+"'",
522524
diff_name])
@@ -555,7 +557,7 @@ def create_diff_stat(old_name, new_name, diff_name, font_size, layer, resolution
555557
if args.threshold and errors > args.threshold:
556558
logger.error('Difference for `{}` is not acceptable ({} > {})'.format(name_layer, errors, args.threshold))
557559
exit(DIFF_TOO_BIG)
558-
cmd = ['convert', diff_name, '-font', 'helvetica', '-pointsize', font_size, '-draw',
560+
cmd = [CONVERT, diff_name, '-font', 'helvetica', '-pointsize', font_size, '-draw',
559561
'text 10,'+font_size+" '"+adapt_name(name_layer)+extra_name+"'", diff_name]
560562
logger.debug('Executing: '+str(cmd))
561563
call(cmd)
@@ -565,7 +567,7 @@ def create_diff_stat(old_name, new_name, diff_name, font_size, layer, resolution
565567
def DiffImages(old_file_hash, new_file_hash, layers_old, layers_new, only_different, changed):
566568
old_hash_dir = cache_dir+sep+old_file_hash
567569
new_hash_dir = cache_dir+sep+new_file_hash
568-
files = ['convert']
570+
files = [CONVERT]
569571
# Compute the difference between images for each layer, store JPGs
570572
font_size = str(int(resolution/5))
571573
all_layers = {}
@@ -871,8 +873,11 @@ def get_layer(line):
871873
logger = logging.getLogger(basename(__file__))
872874

873875
# Check the environment
874-
if which('convert') is None:
875-
logger.error('No convert command, install ImageMagick')
876+
if which("magick"):
877+
# Use new version of ImageMagick
878+
CONVERT = "magick"
879+
elif which('convert') is None:
880+
logger.error('No convert or magick command, install ImageMagick')
876881
exit(MISSING_TOOLS)
877882
use_poppler = not args.force_gs
878883
if which('pdftoppm') is None:

0 commit comments

Comments
 (0)