Jak zmienić rozmiar płótna PNG za pomocą ImageMagick (GraphicsMagick)? (Jak pad z przezroczystością?)

9

Alternatywnie: Jak pobrać nie kwadratowy plik PNG i „wypełnić” „resztę” obrazu przezroczystością, aby wynikowy kwadratowy obraz miał oryginalny obraz wyśrodkowany na kwadracie?

NAJLEPSZE, chcę zrobić dowolne zdjęcie dowolnego formatu dowolnego formatu obsługiwanego przez GM i utworzyć zmniejszoną PNG (powiedzmy, maksymalnie 40 pikseli dla każdego wymiaru), przy zachowanym współczynniku kształtu, wypełnionym przezroczystością dla formatu niekwadratowego oryginalne obrazy ORAZ z zastosowaną już przygotowaną maską przezroczystości PNG 40x40.

Wiem już, jak zmniejszyć i zachować proporcje; Mam już polecenie zastosowania mojego kompozytu. Moim jedynym brakującym elementem są kwadratowe obrazy nie kwadratowe (wypełnienie z przezroczystością).

Preferowane jedno polecenie; dopuszczalny łańcuch wielu poleceń.

(edytować)

Dodatkowe informacje: oto złożone polecenie, którego używam:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png

gdzie mask.png ma białe piksele dla tego, co chcę zachować source-and-target.png i przezroczyste piksele dla tego, co chcę usunąć (i stać się przezroczysty) z source-and-target.png.

Pistacje
źródło

Odpowiedzi:

7

To polecenie pobierze plik wejściowy o dowolnym rozmiarze i najlepiej dopasuje go do kwadratu 40 x 40 i padu z przezroczystością:

convert \
   original.png \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
  -compose Copy_Opacity \
  -composite mask.png \
   original-resized.png

Ta gravityopcja zapewnia, że ​​obraz jest wyśrodkowany w obu kierunkach i transparentjest używany wszędzie tam, gdzie nie ma pikseli. Następnie komponowanie odbywa się za pomocąmask.png

Paweł
źródło
Więc nie możemy tego zrobić jednym strzałem composite?
Pistos
@Pistos Nie jestem pewien, co robisz z kompozytem - to tylko maska ​​przezroczystości do ukrywania / pokazywania fragmentów miniatury po zmianie rozmiaru? Czy możesz edytować i dodawać dotychczasową sekwencję poleceń, abyśmy mogli sprawdzić, czy można ją połączyć?
Paul
@Pistos Myślę, że najlepszym podejściem jest tworzenie kompozycji z -convert, a nie na odwrót. Zaktualizowałem swoją odpowiedź powyżej.
Paul
Blisko, ale nie do końca. Twoje polecenie nie działało w obecnym stanie, a nawet po dostosowaniu nie działało. W porządku, zrobię to w dwóch krokach. Zaktualizuję rzeczy tutaj, gdy otrzymam ostatnie, działające kroki CLI. Dzięki jeszcze raz.
Pistos
Dodałbym -filter Catromprzed thumbnailopcją, ponieważ z mojego doświadczenia wynika, że ​​generalnie generuje obrazy wyższej jakości.
thdoan
6

Jedno polecenie do konwersji wszystkich plików PNG z jednego folderu:

mogrify \
 -resize 50x50 \
 -background transparent \
 -gravity center \
 -extent 50x50 \
 -format png \
 -path resized \
 *.png

mogrify to polecenie z pakietu ImageMagick. Najpierw musisz utworzyć katalog wyjściowy.

uı6ʎɹnɯ ꞁəıuɐp
źródło
Niezłe. BTW, jeśli czujesz się ryzykowny, możesz pominąć -path resizededycję plików na miejscu.
aaronk6
To jest świetne. W mojej instalacji (OSX, 1.3.35) jest gm mogrifyi zamiast tego -path resizedużyj-create-directories -output-directory resized
Blake
1

Oto, z czym w końcu poszedłem. Dwustopniowy proces:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

Gdzie mask.png to białe piksele dla tego, co chciałem zachować, i przezroczyste piksele dla tego, co chciałem maskować (odrzucić).

Pistacje
źródło