• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела wpt лично.

Помощь Выгрузка ресайз картинок в файл YML формата (Яндекс.Маркет)

tankisto

Мой дом здесь!
Регистрация
5 Окт 2010
Сообщения
221
Реакции
254
Для выгрузки данных в отдельный сервис использую формат YML.
Выгружаю только необходимые параметры, такие как артикул, название, цвет, описание, цена и только 1 картинку. Но вывалить картинку 960х720 в маленькое окно не по фен-шую. Поэтому хочу подцепить ресайз картинку формата 160х90. Вопрос, как получить ссылку на нее?
Формат урлов:
3qxfqeN.png


Мне интересно по какому алгоритму генерируется часть урл, подчеркнутая красным?

Вот код, которым я забираю большую картинку:
PHP:
if (intval($arAcc["DETAIL_PICTURE"])>0 || intval($arAcc["PREVIEW_PICTURE"])>0)
            {
                $pictNo = intval($arAcc["DETAIL_PICTURE"]);
                if ($pictNo<=0) $pictNo = intval($arAcc["PREVIEW_PICTURE"]);
                if ($ar_file = CFile::GetFileArray($pictNo))
                {            
                    if(substr($ar_file["SRC"], 0, 1) == "/")
                        $strFile = "http://".$ar_iblock['SERVER_NAME'].implode("/", array_map("rawurlencode", explode("/", $ar_file["SRC"])));
                    elseif(preg_match("/^(http|https):\\/\\/(.*?)\\/(.*)\$/", $ar_file["SRC"], $match))
                        $strFile = "http://".$match[2].'/'.implode("/", array_map("rawurlencode", explode("/", $match[3])));
                    else
                        $strFile = $ar_file["SRC"];
                    $strTmpOff.="<picture>".$strFile."</picture>\n";
                }
            }
Сейчас в $strFile у меня полный путь к картинке 960х720.
Зная алгоритм генерации папки для ресайз изображений я легко подцеплю 160х90

Или получать через CFile::ResizeImageGet? Что логически, наверное, будет более правильным, ведь
Один раз уменьшив изображение получаем физический файл... при следующем вызове метод вернет путь к уменьшенному файлу.
 
Последнее редактирование:
Решение, если кому интересно:

Пол дня мучался с CFile::ResizeImageGet пока не понял, что дело в регистре букв src.
PHP:
if (intval($arAcc["DETAIL_PICTURE"])>0 || intval($arAcc["PREVIEW_PICTURE"])>0)
            {
                $pictNo = intval($arAcc["DETAIL_PICTURE"]);
                if ($pictNo<=0) $pictNo = intval($arAcc["PREVIEW_PICTURE"]);
                if ($ar_file = CFile::ResizeImageGet($pictNo, array('width'=>200, 'height'=>150), BX_RESIZE_IMAGE_PROPORTIONAL, true))
                {                   
                    if(substr($ar_file["src"], 0, 1) == "/")
                        $strFile = "http://".$ar_iblock['SERVER_NAME'].implode("/", array_map("rawurlencode", explode("/", $ar_file["src"])));
                    elseif(preg_match("/^(http|https):\\/\\/(.*?)\\/(.*)\$/", $ar_file["src"], $match))
                        $strFile = "http://".$match[2].'/'.implode("/", array_map("rawurlencode", explode("/", $match[3])));
                    else
                        $strFile = $ar_file["src"];
                    $strTmpOff.="<picture>".$strFile."</picture>\n";
                }
            }
 
Мне интересно по какому алгоритму генерируется часть урл, подчеркнутая красным?

Если не задано сохранять имя файла оригинальное, то md5 из результата функции uniqid
Вот из исходников строчка

PHP:
$fileName = md5(uniqid("", true)).($bSkipExt == true? '' : ".".$fileExt);

А для ресайза тоже самое md5 только из serialize массива параметров

PHP:
$cacheImageFile = "/".$uploadDirName."/resize_cache/".$file["SUBDIR"]."/".$arSize["width"]."_".$arSize["height"]."_".$resizeType.(is_array($arFilters)? md5(serialize($arFilters)): "")."/".$file["FILE_NAME"];
 
Назад
Сверху