Konwertować JPG na PNG z predefiniowanymi kodami kolorów?

Nov 19 2020

Mam kilka map opartych na 66 kolorach, które niestety zapisałem w formacie jpg kilka miesięcy temu.

Odkryłem, że mogę przekonwertować na png i ustawić go na 66 kolorów, ALE czy istnieje możliwość wcześniejszego zdefiniowania tych 66 kolorów, więc na przykład kolory zbliżone do # 888888 zostaną przekonwertowane na # 888888, a nie na 878787 i 878887.

Jednym z problemów jest to, że mapy nie zawierają wszystkich 66 kolorów (zwykle około 30), więc teraz mogę uzyskać 4 różne rodzaje bieli. (dlatego potrzebuję tego rozwiązania)

czy to w ogóle możliwe dzięki imagemagick?

Odpowiedzi

2 MarkSetchell Nov 19 2020 at 15:22

Możesz zrobić „próbkę” 66 x 1 pikseli z 66 wybranych kolorów, pobierając jeden z oryginalnych obrazów PNG i wyodrębniając unikalne kolory w następujący sposób:

magick original.png -unique-colors swatch.png

Następnie możesz zastosować to w ten sposób:

magick unhappy.jpg -remap swatch.png result.png

Więcej szczegółów tutaj .


Oto konkretny przykład. Oto nasza mapa:

Najpierw zrób próbkę 5 kolorów, które chcemy pokazać na naszym obrazie wyjściowym:

magick xc:"rgb(10,100,140)" xc:"rgb(240,190,120)" xc:"rgb(70,130,30)" xc:"rgb(220,230,230)" xc:"rgb(40,80,50)" +append swatch.png

Teraz zamapuj wszystkie kolory oryginału na 5 kolorów w próbce:

magick map.jpg +dither -remap swatch.png result.png


Alternatywnie możemy pozwolić ImageMagick wybrać najlepsze kolory dla próbki w następujący sposób:

magick map.jpg -colors 7 -unique-colors swatch.png

I przemapuj tak samo jak poprzednio, ale używając kolorów wybranych przez ImageMagick :

magick map.jpg +dither -remap swatch.png result.png


Pamiętaj, że możesz używać kodów szesnastkowych ( lub kolorów HSL lub Lab ) tak samo:

convert xc:"#0a658c" xc:"#f0be78" xc:"#46821e" xc:"#dce6e6" xc:"#285032" +append swatch.png

Zauważ, że powyższe polecenia zakładają ImageMagick v7. Jeśli są Państwo zobowiązani do wykorzystania starej składni v6 wymienić magickz convert.