Tag: picture size

Rails3 + Paperclip + dużo nowych błędów

Dzisiaj przyszło mi się zmierzyć z kolejnymi problemami związanymi z Paperclipem. O ile na 1.8.7 i R3 działał, o tyle na 1.9.2 - przestał. Nie wiem czym to idzie, ale czuję że ten plugin żyje czasem swoim własnym życiem.

Sypie między innymi takimi błędami jak:

  • Paperclip::NotIdentifiedByImageMagickError
  • can't convert nil into Integer
  • is not recognized by the 'identify' command

Trzeba coś było z tym zrobić. Po kilku godzinach poszukiwań i eksperymentów udało się! Paperclip wkońcu działa na Railsach 3.0.0 i Rubym 1.9.2-p0. Jak powtórzyć mój sukces? Pierwszą rzeczą jaką musimy zrobić, jest ściągnięcie wersji 2.3.1. Robimy to klonując repozytorium z gita:

git clone git://github.com/thoughtbot/paperclip.git

a następnie zmieniamy tag:

cd paperclip
git checkout v2.3.1

Jest to ostatnia wersja korzystająca ze "starego" procesora. Paradoksalnie, to nowe powinny działać, jednak w moim wypadku stare okazuje się dużo lepsze. Nowsze wersje także działały ale "po części". Przede wszystkim, niezgodne i18n w moim wypadku. Musiałbym je troszkę poprawiać aby internacjonalizacja Paperclipa działała. Po drugie jeśli ładowaliśmy nieprawidłowy format pliku, to owszem, wyłapywało błąd, jednak zgłaszało także błędy identify.

Wróćmy jednak do właściwego tematu. Co zrobić aby Paperclip zaczął działać? Mając już cały plugin w vendor/plugins/ otwieramy plik lib/paperclip/attachment.rb i zmieniamy następującą linijkę (okolice 45-46 linijki):

# lib/paperclip/attachment.rb
instance.run_callbacks(which, @queued_for_write) {|result, obj| false } # commented to make it work with rails 3 & ruby 1.9 {|result, obj| result == false }

na:

instance.run_callbacks(which, @queued_for_write) # commented to make it work with rails 3 & ruby 1.9 {|result, obj| result == false }

Następnie bierzemy się za plik lib/paperclip/processor.rb i zmieniamy:

# lib/paperclip/processor.rb
sprintf("%s,%d,%d%s", File.basename(basename, extension), $$, n, extension)

na:

sprintf("%s,%d,%s%s", File.basename(basename, extension), $$, n, extension)

Te linijki wyglądają PRAWIE identycznie, więc nie radzę się pomylić ;)

Od teraz mamy działającego ładnie i bezproblemowo Paperclipa.

Paperclip – przycinanie obrazków – parametry

Oto jak sprawdzają się poszczególne parametry przy przycinaniu obrazków.
Obraz bazowy (512x346px):

viva_wallpaper

Bez przekształcenia (tylko zmiana rozmiaru) 150x150 powoduje zmianę rozmiaru obrazka do podanych wartości, z zachowaniem proporcji boków czyli otrzymamy obraz o rozmiarze 150x101.

493076142_mini

Najprostsze przekształcenie, czyli 150x150> sprawi, że nasz obraz będzie miał wymiary 150x101 pikseli. Jeśli plik byłby mniejszy, to nic się w nim nie zmieni. Jednak jeśli był większy, to zostanie przeskalowany do "pełniejszego" boku, z zachowaniem stosunku długości boków.

493076142_mini

Opcja 150x150! powoduje że obraz zostanie rozciągnięty do podanych wymiarów. Jeśli któryś bok jest dłuższy niż podane, to zostanie on zwężony. Jednym słowem, obraz będzie ściśnięty bądź rozciągnięty do podanego rozmiaru:

493076142_mini

Następną możliwością jest 150x150# która najpierw tak zmniejsza rozmiar obrazka, aby nie stracił proporcji, a następnie wszystko co "wystaje" poza podany rozmiar zostaje odrzucone.

493076142_mini

50% - zmniejsza nasz obraz z zachowaniem proporcji, do 50% oryginału (tutaj można jeszcze skalować bokami czyli: 20%x50% wtedy szerokość będzie mniejsza o 20% zaś wysokość o 50%):

mini_thumb_493076142

211 - automatycznie zmniejsza obraz aby miał szerokość 211px - wysokość dobierana automatycznie:

mini_thumb_493076142

x123 - zmniejszy obraz do podanej wysokości, dobierając szerokość tak aby proporcje zostały zachowane:

mini_thumb_493076142

200x200^ - dopasowuje obraz z zachowaniem proporcji - tylko wtedy jeśli jest mniejszy niż podane wymiary. Nasz jest większy więc po prostu go nie przeskaluje.

22500@ - dopasowuje obraz do podanej ilości pikseli, z zachowaniem proporcji:

mini_thumb_493076142

Copyright © 2024 Closer to Code

Theme by Anders NorenUp ↑