캐시 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 admin을 통해 업로드 된 경우 원본 이미지는

/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

dataflow / import를 통해 업로드 된 경우 원본 이미지는

/ media / import

그러나 그 너머에는 추측이있을 것입니다. 그러나 사람들은 자신의 업로드 DIR 형식을 원합니다. 가져 오기를 위해 DIR은 실제로 그들에게 달려 있으며 이미지가있는 하위 디렉토리는 관련이 없습니다. 업로드 할 때 이미지의 상대 경로를 제공하기 때문입니다.

md5 해시에 대해 조금

($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해시는 전체 사이트에서 동일한 수 - 모든 이미지에 대한,하지만 당신은 그것을 생성하는 데 사용되는 값을 알아낼 필요가있다. 비교적 쉽게 무차별 대입 할 수 있습니다.

해시의 기본 마 젠토 값입니다

9df78eab33525d08d6e5fb8d27136e95

기여 : sonassi.com


3
물론 당신은 ascii 예술과 함께 엄청나게 철저한 답변을했습니다 ... :)
philwinkle

6
LOL-누군가가 ASCII 아트에 대해 언급하기를 기다리고있었습니다. :) 그리기 / 타이핑하는 데 10 분이 걸렸습니다. 분명히 우리는 비공식적으로 Magento-1 문서 답변을 답변으로 게시하고 있습니다.
Ben Lessani-Sonassi

1
sonassi, 나는 당신의 시간이 어디에서 왔는지 전혀 모른다. 그러나 당신은 지역 사회와 우리 모두에게 큰 승리입니다!
Fabian Blechschmidt

그것은 나에게 매우 유용했고 내가 읽은 최고의 답변 중 하나입니다. 감사!
LeCodeur

8

짧은 대답-아니요. 캐시 이미지 URL을 기반으로 기본 이미지를 반환하는 방법은 없습니다. 그러나 캐시 폴더와 해시를 제거하면 다음과 같이 URL을 직관적으로 지정할 수 있습니다.

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

접두사 trie까지 제품 뒤에있는 모든 것을 제거하십시오 (이 경우 remove 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);

아마도 가장 좋은 방법은 아니지만 잘 작동합니다. 왜 downvote?
Fra

파일 이름에 이미지 크기가 있으면 인덱스가 상쇄되므로 일관성이없는 결과가 나오지 않습니까?
Eric Seastrand

4

에서 list.phtml, 이것은 나를 위해 일한 것입니다 :

echo Mage::getModel('catalog/product_media_config')->getMediaUrl( $_product->getSmallImage()); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.