ImageMagick (GraphicsMagick) ile bir PNG'nin tuval boyutunu nasıl değiştirebilirim? (Şeffaflık ile nasıl doldurulur?)


9

Alternatif olarak: Kare olmayan bir PNG'yi nasıl alabilir ve görüntünün "geri kalanını" saydamlıkla "doldurabilirim", böylece elde edilen kare görüntünün orijinal görüntünün karede ortalanması sağlanır?

Nihayetinde istediğim, herhangi bir boyutta GM destekli herhangi bir formatın herhangi bir görüntüsünü almak ve en boy oranı korunarak kare olmayan bir saydamlık için ölçeklendirilmiş bir PNG (her boyut için maksimum 40 piksel) oluşturmaktır. orijinal görüntüler VE önceden hazırlanmış 40x40 PNG saydamlık maskesi uygulanmış.

En-boy oranının nasıl küçültüleceğini ve korunacağını zaten biliyorum; Kompozitimi uygulamak için zaten komutum var. Benim tek eksik parçam kare-alizing kare olmayan görüntüler (şeffaflık ile dolgu).

Tek komut tercih edilir; çok komutlu zincir kabul edilebilir.

(Düzenle)

Ek bilgi: İşte kullanıyorum kompozit komut:

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

Burada mask.png, source-and-target.png'de saklamak istediğim şey için beyaz piksellere ve source-and-target.png dosyasının kaldırmak (ve saydam hale getirmek) için şeffaf piksellere sahiptir.

Yanıtlar:


7

Bu komut herhangi bir boyuttaki girdi dosyasını alır ve en iyi şekilde 40x40 kareye ve saydamlığa sahip bir yüzeye sığdırır:

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

Bu gravityseçenek görüntünün her iki yönde de ortalanmasını sağlar ve transparentpiksel olmayan yerlerde kullanılır. Sonra kompozisyon ile yapılırmask.png


Yani tek seferde yapamayız composite?
Pistos

@Pistos Kompozit ile ne yaptığınız konusunda net değilim - yeniden boyutlandırdıktan sonra küçük resmin bölümlerini gizlemek / göstermek için sadece bir şeffaflık maskesi var mı? Eğer Can düzenleme kombine edilebilir olmadığını görebiliriz böylece ve o ana kadar sahip komut dizisini ekleyin?
Paul

@Pistos Bence en iyi yaklaşım başka bir yol yerine -convert ile birleştirme yapmaktır. Yukarıdaki cevabımı güncelledim.
Paul

Yakın, ama tam olarak değil. Komutunuz olduğu gibi çalışmadı ve ayarlamalarla bile işe yaramadı. Tamam, iki adımda yapacağım. Son çalışan CLI adımlarını aldıktan sonra buradaki şeyleri güncelleyeceğim. Tekrar teşekkürler.
Pistos

Ben eklersiniz -filter Catromönce thumbnailçünkü genellikle daha yüksek kalitede görüntü üretir benim deneyimlerinden seçeneği.
thdoan

6

Tüm PNG'leri tek bir klasörden dönüştürmek için bir komut:

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

mogrify , ImageMagick paketinden bir komuttur. Önce çıktı dizini oluşturmanız gerekir.


Güzel bir. BTW, Maceraperest hissediyorsanız -path resized, dosyaları yerinde düzenlemeyi ihmal edebilirsiniz .
aaronk6

Bu harika. Benim yüklemek (OSX, 1.3.35) o en On gm mogrifyve yerine -path resized, kullanımı-create-directories -output-directory resized
Blake

1

İşte sonunda neyle gitti. İki adımlı bir işlem:

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

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

Mask.png saklamak istediğim şey için beyaz piksel ve maskelemek istediğim şey için şeffaf pikseldir (at).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.