Używam Magento 2 CE w wersji 2.1.0
Mam moduł niestandardowy z polem obrazu. Po przesłaniu chcę zdjęć w innym rozmiarze, ponieważ dla produktu mamy obraz miniatury, obraz listy i obraz strony ze szczegółami produktu.
Możliwość przesłania 1 obrazu bez zmiany rozmiaru.
Używam poniższego kodu do zmiany rozmiaru obrazu, ale daje on adres URL obrazu produktu. Nie mój niestandardowy moduł.
\ app \ code \ Custom \ Module \ Block \ MyPosts \ Edit.php
public function getImage($posts, $image) {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_imagehelper = $objectManager->get('Magento\Catalog\Helper\Image');
echo $postImage = $_imagehelper->init($posts, $image)->constrainOnly(FALSE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize(400)->getUrl();
exit;
}
Daje poniżej adresu URL http: //localhost/magento2/pub/static/frontend/Magento/luma/en_US/Magento_Catalog/images/product/placeholder/.jpg
Mój obraz jest przechowywany tutaj: \magento2\pub\media\custom_module\posts\image
.
Jak mogę uzyskać zmianę rozmiaru obrazu za pomocą tej ścieżki i jak mogę zapisać / pobrać obraz o innym rozmiarze?
źródło
Akceptowana odpowiedź nie uwzględnia buforowania obrazu w celu poprawy wydajności. Nie trzeba zmieniać rozmiaru i zastępować obrazu za każdym razem, gdy jest wymagany. Poniższe podejście zapisuje obraz o zmienionym rozmiarze w folderze „pamięci podręcznej”, dzięki czemu kolejne wywołania zwracają obraz z pamięci podręcznej. Metoda jest zawarta w pomocniku (a nie bloku), dzięki czemu możesz wywoływać ją z dowolnego szablonu, który ci się podoba:
app / code / Vendor / Namespace / Helper / Image.php
Teraz z dowolnego szablonu .phtml możesz wywołać metodę w następujący sposób:
źródło
if (!$this->_fileExists($path . $image)) {
naif (!$this->_fileExists($path . $image) && $this->_fileExists($mediaFolder . $image)) {
\Magento\Catalog\Helper\Image
.Obawiam się, że nie musisz tworzyć nowych klas do zmiany rozmiaru zdjęć, ponieważ pomocnicy Magento już to mają (patrz
\Magento\Catalog\Helper\Image::resize
).Możesz po prostu zrobić:
Możesz również zobaczyć przykład tego użycia na
\Magento\VisualMerchandiser\Block\Adminhtml\Category\Merchandiser\Tile::getImageUrl
(chyba Magento EE)źródło
$product
ale tylko ścieżka do pliku obrazu w / media.Wystąpił problem
resize
polegający na tym, że metoda nie przycinała obrazu do moich wymiarów, dlatego musisz obliczyć wartości przycięcia od góry i dołu lub od lewej i prawej strony, w zależności od oryginalnego rozmiaru obrazu. Użyłem kodu z @Rakesh i zmodyfikowałem go, aby sprawdzić, czy oryginalny obraz jest wyższy lub szerszy i odpowiednio przycina:źródło
@Rakesh - Zrobiłem to samo, ale nie działa dla mnie błąd
czy możesz mi w tym pomóc
Dziękuję Ci.
źródło