আমি এইভাবেই করেছি। এটি বেশ দক্ষ এবং পরিষ্কার:
1) প্রথমে আপনাকে নিম্নলিখিত ক্লাসগুলি ইনজেক্ট করতে হবে:
protected $_storeManager;
protected $_appEmulation;
protected $_blockFactory;
public function __construct(
...
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\View\Element\BlockFactory $blockFactory,
\Magento\Store\Model\App\Emulation $appEmulation)
{
$this->_storeManager = $storeManager;
$this->_blockFactory = $blockFactory;
$this->_appEmulation = $appEmulation;
}
2) তারপরে, নীচের কোড সহ একটি getImageUrl পদ্ধতি তৈরি করুন:
protected function getImageUrl($product, string $imageType = '')
{
$storeId = $this->_storeManager->getStore()->getId();
$this->_appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);
$imageBlock = $this->_blockFactory->createBlock('Magento\Catalog\Block\Product\ListProduct');
$productImage = $imageBlock->getImage($product, $imageType);
$imageUrl = $productImage->getImageUrl();
$this->_appEmulation->stopEnvironmentEmulation();
return $imageUrl;
}
দ্রষ্টব্য: আপনি যখন অ্যাডমিনের কাছ থেকে বা কোনও এপিআইয়ের জন্য এই কলটি করেন তখনই "অ্যাপ্লিকেশন" কোডটি প্রয়োজনীয় । অন্যথায়, আপনি নীচে ত্রুটি পাবেন (বা অনুরূপ):
Unable to resolve the source file for 'webapi_rest/_view/en_AU/Magento_Catalog/images/product/placeholder/.jpg'
3) পণ্য আইটেমটি এবং আপনার পছন্দসই চিত্রটি (আপনার ভিউ.এক্সএমএল ফাইলের উপর ভিত্তি করে ) পাস করার জন্য getImageUll কে কল করুন
...
$smallImage = $this->getImageUrl($productObject, 'product_page_image_small');
...