libvips , библиотека обработки изображений, используемая Sharp, имеет find_trim
.
В вашем случае вы хотите протестировать только альфа-канал (полоса 3), поэтому извлеките его и найдите ограничивающий прямоугольник ненулевых значений:
$ vips extract_band test-transparency.png x.png 3
$ vips find_trim x.png --background 0 --threshold 20
0
0
722
639
И это осталось / верх / ширина / высота области, которую вы хотите. Вы можете вырезать это из вашего исходного изображения с помощью:
$ vips crop test-transparency.png y.png 0 0 722 639
Сделать:
Вы можете сделать это как однострочник с:
$ vips crop test-transparency.png y.png $(vips extract_band test-transparency.png x.png 3; vips find_trim x.png --background 0 --threshold 20)
Вы можете сделать его немного более эффективным в Python:
#!/usr/bin/python3
import sys
import pyvips
image = pyvips.Image.new_from_file(sys.argv[1])
left, top, width, height = image[3].find_trim(background=0, threshold=20)
image = image.crop(left, top, width, height)
image.write_to_file(sys.argv[2])
И раскошелиться на это. Конечно, вы можете не захотеть добавлять py как зависимость.