Отримати оригінальний файл зображення з URL-адреси кешу


33

Чи є якась функція, що надає файл продукту кеша зображення повертає оригінальний?

Приклад:

=> URL кеша:

{BASEURL}/media/catalog/product/cache/2/image/9df78eab33525d08d6e5fb8d27136e95/a/l/IMAGE.jpg

=> Бажаний результат:

BASEURL/media/catalog/product/a/l/IMAGE.jpg

Відповіді:


74

URL-адресу зображення, яку ви вказали, неможливо мати в магазині Magento. Я здогадуюсь, ви хотіли, щоб це було затуманено, але, роблячи це, унеможливити відповідь.

Я не можу придумати жодних причин для деконструкції контуру зображення, якщо ви не перебираєте веб-сайт на іншому веб-сайті, інакше ви матимете прямий доступ до моделі продукту і зможете отримати цю інформацію безпосередньо.

Тим не менш, використовуючи реальний приклад. Напр

/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/m/e/me-d1_2.jpg

Розбудова контуру зображення кеша

/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/m/e/me-d1_2.jpg
|___________________________|_|_____|________________________________|_|_|__________|
             |               |   |                  |                 | |     |
       Cache Directory       |   |                  |                 | |     |
Mage/Catalog/Model/Product/Media/Config.php         |                 | |     |
getBaseMediaPath()           |   |                  |                 | |     |
                             |   |                  |                 | |     |
                             |   |                  |                 | |     |
                          Store ID                  |                 | |     |
                          Mage::app()->getStore()->getId()            | |     |
                                 |                  |                 | |     |
                                 |                  |                 | |     |
                            Subdirectory            |                 | |     |
                            Mage/Catalog/Model/Product/Image.php      | |     |
                            getDestinationSubdir()  |                 | |     |
                                                    |                 | |     |
                                                    |                 | |     |
                                              MD5 of Image Params     | |     |
                                              See below               | |     |
                                              Mage/Catalog/Model/Product/Image.php
                                              Line +324               | |     |
                                                                      | |     |
                                                                      | |     |
                                                          First letter of Image Name
                                                                        |     |
                                                                        |     |
                                                          Second letter of Image Name
                                                                              |
                                                                              |
                                                                     Original Image Name

Пошук оригінального зображення

Якщо завантажено через адміністратора Magento , оригінальне зображення розташоване за адресою,

/media/catalog/product/m/e/me-d1_2.jpg

Тож отримати оригінальну URL-адресу досить просто, просто видаліть шлях кешу та хеш-каталог каталогу.

Тобто Видалитиcache/1/image/9df78eab33525d08d6e5fb8d27136e95/

Так

/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/m/e/me-d1_2.jpg

Стає

/media/catalog/product/m/e/me-d1_2.jpg

Якщо завантажено через потік даних / імпорт , оригінальне зображення розташоване в

/ медіа / імпорт

Але далі не було б здогадок. Однак люди хочуть відформатувати завантажений DIR-код для імпорту, справді їм належить, і підкаталог зображень у них насправді не має значення - оскільки вони надають відносний шлях до зображення при завантаженні.

Трохи про md5 Hash

($this->_keepAspectRatio  ? '' : 'non') . 'proportional',
($this->_keepFrame        ? '' : 'no')  . 'frame',
($this->_keepTransparency ? '' : 'no')  . 'transparency',
($this->_constrainOnly ? 'do' : 'not')  . 'constrainonly',
$this->_rgbToString($this->_backgroundColor),
'angle' . $this->_angle,
'quality' . $this->_quality,

Необов’язкові аргументи, якщо є водяний знак

$this->getWatermarkFile(),
$this->getWatermarkImageOpacity(),
$this->getWatermarkPosition(),
$this->getWatermarkWidth(),
$this->getWatermarkHeigth()

md5(implode('_', $miscParams));

Так, наприклад, із типовими настройками

md5('non_no_no_not_ffffff_0_90')

md5Хеш може бути однаковим по всьому сайту - для кожного зображення, але вам потрібно буде з'ясувати значення , використовувані для його генерації. Ви можете зв'язати це з грубою силою.

Це значення Magento за замовчуванням для хеша

9df78eab33525d08d6e5fb8d27136e95

Атрибути: sonassi.com


3
Звичайно, у вас є надзвичайно вичерпна відповідь на
тему

6
LOL - Я чекав, коли хтось прокоментує мистецтво ASCII :) Робить достойним, що для малювання / набору знадобилося 10 хвилин! Очевидно, що ми неофіційно публікуємо відповідь документації Magento-1 у відповідь.
Бен Лессані - Сонассі

1
sonassi, я не маю уявлення, звідки бере свій час, але ти - велика перемога для громади та всіх нас!
Фабіан Блешшмідт

Це було дуже корисно для мене, і одна з найкращих відповідей, яку я коли-небудь читав. Спасибі!
LeCodeur

8

Коротка відповідь - ні. Немає способу повернення базового зображення на основі URL-адреси зображення кешу. Однак, якщо ви видалите папку кешу та хеш, ви повинні мати можливість зрозуміти, якою буде URL-адреса, наприклад:

 http://www.mysite.com/media/catalog/product/cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/u/t/uti001_2.jpg

видаліть усе після продукту до появи триефікса префікса (у цьому випадку видаліть cache/1/image/109x298/9df78eab33525d08d6e5fb8d27136e95/:

 http://www.mysite.com/media/catalog/product/u/t/uti001_2.jpg

Можливо, кращим способом вирішення цього питання є використання об'єктної моделі:

$product = Mage::getModel('catalog/product')->load(42);
echo $product->getImage();
echo $product->getThumbnail();

5

Це працює

   $r = explode('/' ,$imagesCachePath);

   unset($r[6]);
   unset($r[7]);
   unset($r[8]);
   unset($r[9]);

   $r = implode('/',$r);

це, мабуть, не найкращий підхід, але працює чудово. навіщо знижувати?
Від

Чи не призведе це до непослідовних результатів, якщо в імені файлу є розміри зображення, оскільки це змістить індекси?
Eric Seastrand

4

У list.phtmlцьому мені працювало:

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.