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

Тема в разделе "Битрикс", создана пользователем tankisto, 19 ноя 2015.

Метки:
Модераторы: mrLom, puagardian
  1. tankisto

    tankisto

    Регистр.:
    5 окт 2010
    Сообщения:
    220
    Симпатии:
    210
    Для выгрузки данных в отдельный сервис использую формат YML.
    Выгружаю только необходимые параметры, такие как артикул, название, цвет, описание, цена и только 1 картинку. Но вывалить картинку 960х720 в маленькое окно не по фен-шую. Поэтому хочу подцепить ресайз картинку формата 160х90. Вопрос, как получить ссылку на нее?
    Формат урлов:
    [​IMG]

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

    Вот код, которым я забираю большую картинку:
    PHP:
    if (intval($arAcc["DETAIL_PICTURE"])>|| 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"], 01) == "/")
                            
    $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? Что логически, наверное, будет более правильным, ведь
     
    Последнее редактирование: 20 ноя 2015
  2. tankisto

    tankisto

    Регистр.:
    5 окт 2010
    Сообщения:
    220
    Симпатии:
    210
    Решение, если кому интересно:

    Пол дня мучался с CFile::ResizeImageGet пока не понял, что дело в регистре букв src.
    PHP:
    if (intval($arAcc["DETAIL_PICTURE"])>|| 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_PROPORTIONALtrue))
                    {                   
                        if(
    substr($ar_file["src"], 01) == "/")
                            
    $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";
                    }
                }
     
    Jusper1 и mrLom нравится это.
  3. tankisto

    tankisto

    Регистр.:
    5 окт 2010
    Сообщения:
    220
    Симпатии:
    210
  4. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    164
    Симпатии:
    205
    Если не задано сохранять имя файла оригинальное, то 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"];
     
    tankisto нравится это.