7

Używam CarrierWave::RMagick do tworzenia miniaturowych obrazów obrazów dla aplikacji Rails i zauważyłem utratę jakości, gdy obrazy są zmniejszane. Jest to zrozumiałe do pewnego stopnia, ponieważ mamy mniej pikseli w zmniejszonym obrazie, a tym samym mniejszej jakości, ale oczekuję lepszej jakości. Pokażę wam przykład:Utrata jakości obrazu PNG następujący po CarrierWave :: RMagick resize_to_fit

OriginalPhotoshop (Bicubic)RMagick

Od lewej do prawej, pierwszy z nich jest oryginalna (100x105), drugi jest Bicubic Resize Photoshop (95x100), a trzecia jest wynikiem RMagick's resize_to_fit (95x100).

W tym przykładzie obraz oryginalny jest tylko nieznacznie większy niż żądana miniatura, ale zasadniczo zmuszam każdą miniaturę do maksimum 100x100. Mam nadzieję, że widzisz różnicę między zmniejszonymi obrazami. Porównanie jakości Photoshopa z jakością RMagick może być głupie, ale nawet pomniejszanie w Chrome, aby obrazy były mniejsze, zapewnia lepszą jakość obrazu.

Ja w zasadzie za pomocą tego w klasie uploader CarrierWave:

version :thumb do 
    process :resize_to_fit => [100, 100] 
    end 

Wszelkie pomysły, w jaki sposób można poprawić jakość obrazu? lub czy są jakieś alternatywy dla RMagick, które mogą zrobić lepiej?

EDYCJA: Próbowałem this, ale to nie miało żadnego znaczenia. Pomyślałem, że tak było w przypadku obrazów JPEG.

+0

Czy kiedykolwiek to rozgryzłeś? – cman77

+1

Nie, nigdy nie. Nie mogłem też znaleźć lepszego rozwiązania, więc zniosłem to :) – Merott

+0

jpg pomoże niektórym obrazom przy użyciu wielu gradientów. Podejrzewam jednak, że problem dotyczy starzejących się algorytmów RMagick używanych do skalowania. W programie Photoshop wyniki są różne, uważam, że jest to przyczyną. Alternatywą dla RMagicka jest Jimp, ale jest zupełnie inny i nie jest stworzony dla szyn. – Eddie

Odpowiedz

0

Problem pojawia się w bibliotece imagemagick, a nie w odniesieniu do operatora carrierwave lub rmagick.

Można to sprawdzić w wierszu poleceń. Obie z tych poleceń wytwarzają taką samą moc rozmyte jako rmagick, wykorzystując własne mogrify polecenia ImageMagick za:

mogrify -resize 100x100 original.png 
mogrify -resize 100x100 -quality 100 original.png 

imagemagick docs sugerują, że polecenie -resize (używany przez carrierwave poprzez rmagick lub minimagick) tworzy rozmazanych wyników dla małych zmian jak ten testujemy tutaj i lepiej radzisz sobie z poleceniem -adaptive-resize, ale w moich szybkich testach nie udało mi się uzyskać lepszego wyniku.

Inne mają reported better results używając graphicsmagick zamiast imagemagick (co może również wymagać przełączenia na minimagick z rmagick), ale tego nie przetestowałem.