Zmieniasz rozmiar zdjęć do rzeczywistego rozmiaru użytego w edytorze?

20

Czy istnieje sposób, aby zmienić rozmiar zdjęć do rzeczywistego rozmiaru, który będą wyświetlane w poście? Mam użytkowników, którzy importują duży obraz, a następnie zmieniają jego rozmiar w edytorze wizualnym. Jest to łatwe, ponieważ mogą po prostu przeciągnąć obraz do pożądanego rozmiaru, bez uprzedniego otwierania edytora obrazów, zmiany rozmiaru obrazu, zapisywania go i przesyłania jako osobnego załącznika. Oczywiście czasami powoduje to obraz o szerokości 100 pikseli w poście, ale w rzeczywistości 1500 pikseli.

Czy istnieje wtyczka, która robi to, gdy zapisywany jest nowy post? Chciałbym zachować istniejący obraz w pełnym rozmiarze (do łączenia lub później zmienić rozmiar), ale po prostu dodaj dodatkowy rozmiar (i zapisz go w _wp_attachment_metadataobiekcie), aby ten post miał obraz w odpowiednim rozmiarze i odniesienie do pełnowymiarowy załącznik.

Oczywiście wszystkie istniejące posty powinny być obsługiwane raz. <img>Tagi nie mogą mieć po prostu width, po prostu height, albo żaden z nich to powinny być czyszczone, więc wszyscy mają prawidłowe width, heighta obraz tego rozmiaru.

Jan Fabry
źródło
Czy zgadzasz się z rozwiązaniem po stronie serwera, które zmienia rozmiar obrazów w locie na podstawie parametrów get przekazywanych do istniejącego adresu URL obrazu? Apache / Mod_Rewrite?
hakre
@hakre: Czy masz na myśli filtr po zapisaniu, który przechodzi przez post i przepisuje każdy obraz jako image.png?w=300&h=400, lub image-300x400.pngktóry chciałbym następnie pobrać za pomocą Mod_Rewrite i zmienić rozmiar (i pamięć podręczną) na żądanie? Czy to przewaga nad jednokrotnym utworzeniem obrazów o zmienionym rozmiarze (w tej akcji po zapisaniu) i udostępnieniem ich jako plików statycznych?
Jan Fabry
@Jan Fabry Tak, właśnie o tym myślałem. Zaletą jest to, że obraz jest tworzony tylko na żądanie, więc dopóki autor nie edytuje postu, nie tworzy plików jako takich. Oprócz nie blokowania edycji, jest bardziej oddzielony od wp, więc możesz nawet stworzyć usługę serwera, ekstrawagancję buforowania CDN lub cokolwiek innego. :) --- wp.com robi coś podobnego, jeśli dobrze to widzę.
hakre
W połączeniu z buforowaniem to podejście naprawdę błyszczy. Zakładam, że jest do tego wtyczka. Możesz także uruchomić instalację Zenphoto wraz z wtyczką, taką jak Zenphoto Gallery (moja własna: lmazy.verrech.net/zenphoto-gallery )
Raphael
@Raphael: Rzeczywiście, dzisiaj zbadałem możliwe wtyczki i niektórzy przyjmują takie podejście. Jeśli masz coś do dodania do mojej krótkiej listy , zrób to, wszyscy mogą ją edytować.
Jan Fabry,

Odpowiedzi:

11

Stworzyłem dwie wtyczki, które razem powinny rozwiązać moje potrzeby. Są one obecnie na wczesnym etapie alfa i wszystkie komentarze są mile widziane.

Podstawową wtyczką jest Resizer na żądanie . Wtyczki te monitorują żądania dotyczące nieistniejących plików w katalogu wysyłania i w razie potrzeby tworzą obrazy o żądanym rozmiarze. Na przykład image-200x100.jpgutworzy i zwróci image.jpg, ale zmieni rozmiar na 200 na 100 pikseli. Obraz jest zapisywany pod tą nazwą w katalogu, więc dalsze żądania są obsługiwane bezpośrednio przez serwer.

Druga wtyczka, Resize img tags , modyfikuje <img>tagi, aby ich srcatrybuty zawierały dane o szerokości i / lub wysokości. Dzięki temu pierwsza wtyczka może wyświetlać prawidłowe obrazy. Razem robią to, co chcę, i muszę tylko utworzyć funkcję jednorazowego uruchomienia, aby przekonwertować wszystkie istniejące posty, ale to powinno być łatwe (nie chcę się podłączać do the_contentczegoś, co powinno działać tylko raz).

Trzecia „dodatkowa” wtyczka, Wirtualne obrazy pośrednie , przechwytuje tworzenie obrazów pośrednich podczas przesyłania nowego obrazu do WordPress. Ponieważ są one nadal tworzone przez pierwszą wtyczkę na żądanie, pozwala to określić wiele rozmiarów obrazów bez zajmowania miejsca na dysku, chyba że są faktycznie używane. To nie jest potrzebne, aby dwa pierwsze działały, ale był to łatwy dodatek i podkreśla fakt, że nadal muszę obejść edytor obrazów WordPress, ale zrobię to, gdy utworzę mój edytor miniatur , który również będzie użyj pierwszej wtyczki.

Jan Fabry
źródło
1
Brzmią naprawdę świetnie! Nie mogę się doczekać, aby mieć czas na wypróbowanie ich, gdy będę ich potrzebować w rzeczywistych scenariuszach.
MikeSchinkel
Świetna sprawa. Czy rozważasz dodanie ich do repozytorium wtyczek worpdress?
hakre
@hakre: Tak, rzeczywiście. Kiedyś przygotowałem je do recenzji :-)
Jan Fabry
4

Przeszukałem katalog wtyczek w celu znalezienia "resize"lub "crop"(drugie pytanie ) i zanotowałem swoje ustalenia w publicznym arkuszu kalkulacyjnym Google . Wyszukiwanie wtyczek jest bardzo mylące w wynikach (ostatnia strona "resize"wyszukiwania pokazuje „Wyświetlanie 145-150 z 273 wtyczek”), więc mogłem przeoczyć kilka. Powiązane uwagi: wydaje się, że wszyscy myślą, że świat potrzebuje kolejnej wtyczki do pokazu slajdów. Niewielu zdaje się zdawać sobie sprawę, że content_save_premoże to być lepszy filtr do intensywnego analizowania niż the_content.

Nie testowałem jeszcze żadnej z tych wtyczek, ale oto lista wtyczek, które wydają się robić to, co chcę. W nawiasach dodałem numer wersji „Kompatybilny z”.

Osobiste przemyślenia: Pierwsze cztery przepisują adres URL na dynamiczną stronę (coś w rodzaju /wp-content/plugins/my-plugin/image.php?src=[original src]&w=100&h=50), z różnymi formami buforowania. Wolę prawdziwy obraz, który jest tworzony w razie potrzeby, podobny do podejścia, jakie przyjmuje ImageScaler. Podzielę to jednak (i ​​dołączę sugestię hakre'a do komentarzy) i najpierw przepiszę wszystkie adresy URL od /wp-content/uploads/2010/11/image.jpgdo /wp-content/uploads/2010/11/image-100x50.jpg, a następnie pozwól skryptowi utworzyć brakujące obrazy. Pierwsze żądanie dla tego obrazu tworzy obraz, wszystkie kolejne żądania używają tego utworzonego obrazu. Pozwala mi to również podzielić funkcjonalność między różne wtyczki. Opublikuję to rozwiązanie w osobnej odpowiedzi.

Te wtyczki ograniczają obrazy do określonego maksymalnego rozmiaru (Czym to się różni od określenia $content_width?):

  • JP-redesign-images , sprawdza zarówno obrazy dowiązane na gorąco, jak i obrazy ponadgabarytowe (tylko jeśli są zbyt duże, a nie tylko jeśli mają tylko zmieniony rozmiar) (3.0.1)
  • Hungred Image Fit , sprawdza zbyt duże obrazy (3.0.0)

Poniższa wtyczka jest interesująca z innych powodów:

To jest post społeczności Wiki, więc można go zaktualizować, jeśli znajdziesz nowe wtyczki.

Jan Fabry
źródło
0

Co powiesz na wykorzystanie zmiennej timthumb i przekazującej do automatycznej zmiany rozmiaru / wymiarów obrazu i poziomów powiększenia? W ten sposób można zachować oryginalne rozmiary obrazu. Jeśli potrzebujesz kilku przykładów w tej linii, daj mi znać.

NetConstructor.com
źródło
0

Wordpress oferuje trzy domyślne rozmiary (mały, średni, duży), które można skonfigurować. Jeśli ich używasz, Wordpress tworzy kopie o zmienionym rozmiarze. Prawdopodobnie dobrym stylem jest użycie ich i ustawienie liczby tak, aby pasowały do ​​bieżącego stylu. Powoduje to, że obrazy nie mają różnych rozmiarów na całej stronie i pozwalają na globalne korekty przy zmianie motywu.

Raphael
źródło
Wiem, że najlepiej trzymać się wstępnie zdefiniowanych rozmiarów obrazów, ale moi klienci nie :-) Jeśli mogą zmienić rozmiar obrazu w edytorze, logiczne jest, że system podąża za tym wyborem.
Jan Fabry,
Cóż, mógł usunąć tę możliwość i zmusić ich do pracy czysto;)
Raphael
To także interesujące pytanie: „Jak wyłączyć funkcję zmiany rozmiaru w TinyMCE?” Jeśli znasz odpowiedź na to pytanie, utwórz nowe pytanie i odpowiedz na nie samodzielnie, prawdopodobnie przydadzą się innym.
Jan Fabry
0

Wydaje się, że właśnie wydana wtyczka Image Pro właśnie to robi. Nie przetestowałem się jeszcze, demo wygląda bardzo imponująco, zauważ słabą kompatybilność przeglądarki (w tej chwili tylko Firefox).

Rarst
źródło