J'utilise Magento 2 CE version 2.1.0
J'ai un module personnalisé avec champ d'image. Quand il est téléchargé, je veux des images de tailles différentes comme pour le produit, nous avons une image miniature, une image de liste et une image de page de détail du produit.
Capable de télécharger 1 image sans redimensionner.
J'utilise le code ci-dessous pour redimensionner l'image, mais cela donne l'URL de l'image du produit. Pas mon module personnalisé.
\ 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;
}
Il donne l'URL ci-dessous http: //localhost/magento2/pub/static/frontend/Magento/luma/en_US/Magento_Catalog/images/product/placeholder/.jpg
Mon image est stockée ici: \magento2\pub\media\custom_module\posts\image
.
Comment puis-je obtenir redimensionner l'image avec ce chemin et comment puis-je enregistrer / récupérer une image de taille différente?
la source
La réponse acceptée ne considère pas la mise en cache de l'image pour améliorer les performances. Vous n'avez pas besoin de redimensionner et d'écraser l'image chaque fois qu'elle est demandée. L'approche suivante enregistre l'image redimensionnée dans un dossier «cache» afin que les appels successifs renvoient l'image à partir du cache. La méthode est contenue dans un assistant (pas un bloc), vous pouvez donc l'appeler à partir de n'importe quel modèle que vous aimez:
app / code / Vendeur / Espace de noms / Aide / Image.php
Maintenant, à partir de n'importe quel modèle .phtml, vous pouvez appeler la méthode comme ceci:
la source
if (!$this->_fileExists($path . $image)) {
pourif (!$this->_fileExists($path . $image) && $this->_fileExists($mediaFolder . $image)) {
\Magento\Catalog\Helper\Image
.Je crains que vous n'ayez pas besoin de créer de nouvelles classes pour redimensionner vos images, car les assistants Magento l'ont déjà (voir
\Magento\Catalog\Helper\Image::resize
).Donc, vous pouvez simplement faire:
Vous pouvez également voir un exemple de cette utilisation sur
\Magento\VisualMerchandiser\Block\Adminhtml\Category\Merchandiser\Tile::getImageUrl
(Magento EE uniquement, je suppose)la source
$product
chemin d'accès au fichier image dans / media.J'ai rencontré un problème où la
resize
méthode ne recadrait pas l'image à mes dimensions, vous devez donc calculer les valeurs de recadrage de haut en bas ou de gauche à droite, en fonction de la taille de votre image d'origine. J'ai utilisé le code de @Rakesh et l'ai modifié pour qu'il vérifie si l'image d'origine est plus haute ou plus large et recadrée en conséquence:la source
@Rakesh - J'ai fait la même chose mais ça ne marche pas pour moi il y a une erreur
pouvez-vous m'aider à ce sujet.
Je vous remercie.
la source