Ich verwende Magento 2 CE Version 2.1.0
Ich habe ein benutzerdefiniertes Modul mit Bildfeld. Wenn es hochgeladen wird, möchte ich Bilder unterschiedlicher Größe, da wir für das Produkt ein Miniaturbild, ein Listenbild und ein Produktdetailseitenbild haben.
Kann 1 Bild ohne Größenänderung hochladen.
Ich verwende den folgenden Code zum Ändern der Bildgröße, aber er gibt die Produktbild-URL an. Nicht mein benutzerdefiniertes Modul.
\ 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;
}
Es gibt die folgende URL an : http: //localhost/magento2/pub/static/frontend/Magento/luma/en_US/Magento_Catalog/images/product/placeholder/.jpg
Mein Bild ist hier gespeichert : \magento2\pub\media\custom_module\posts\image
.
Wie kann ich mit diesem Pfad die Bildgröße ändern und wie kann ich Bilder unterschiedlicher Größe speichern / abrufen?
quelle
Die akzeptierte Antwort berücksichtigt nicht das Zwischenspeichern des Bildes, um die Leistung zu verbessern. Sie müssen die Größe des Bildes nicht jedes Mal ändern und überschreiben, wenn es angefordert wird. Der folgende Ansatz speichert das verkleinerte Bild in einem "Cache" -Ordner, sodass aufeinanderfolgende Aufrufe das Bild aus dem Cache zurückgeben. Die Methode ist in einem Helfer (nicht in einem Block) enthalten, sodass Sie sie aus einer beliebigen Vorlage aufrufen können:
app / code / Vendor / Namespace / Helper / Image.php
Jetzt können Sie aus jeder .phtml-Vorlage die Methode wie folgt aufrufen:
quelle
if (!$this->_fileExists($path . $image)) {
zuif (!$this->_fileExists($path . $image) && $this->_fileExists($mediaFolder . $image)) {
\Magento\Catalog\Helper\Image
.Ich fürchte, Sie müssen keine neuen Klassen erstellen, um die Größe Ihrer Bilder zu ändern, da Magento-Helfer diese bereits haben (siehe
\Magento\Catalog\Helper\Image::resize
).Sie können also einfach Folgendes tun:
Ein Beispiel für diese Verwendung finden Sie auch unter
\Magento\VisualMerchandiser\Block\Adminhtml\Category\Merchandiser\Tile::getImageUrl
(Magento EE nur, denke ich)quelle
$product
sondern nur einen Pfad zur Bilddatei in / media.Ich habe ein Problem festgestellt, bei dem die
resize
Methode das Bild nicht auf meine Abmessungen zuschneidet. Daher müssen Sie die Zuschneidewerte je nach Originalbildgröße von oben und unten oder von links und rechts berechnen. Ich habe den Code von @Rakesh verwendet und ihn so geändert, dass überprüft wird, ob das Originalbild größer oder breiter ist, und entsprechend zugeschnitten wird:quelle
@ Rakesh - Ich habe das gleiche getan, aber es funktioniert nicht für mich, es liegt ein Fehler vor
Kannst du mir dabei helfen?
Vielen Dank.
quelle