Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Не работает Watermark

00 голосов
6
Ребята нужна помощь! сделал все как  описано http://dev.1c-bitrix.ru/community/blogs/vad/preparing-an-update-version-11.php и не работает (

файл result_modifier.php
Код
$arWaterMark  = array(



   "name"     => "watermark", 


   "position"    => "bc",     

   "type"     => "image",    


   "size"     => "real",   


   "coefficient"    => "1",    

   "fill"     => "exact",   


   "file"     => "[url]http://192.168.1.139/watermark.png",[/url] 

   "text"     => "Водяной знак!",


   "color"    => "ff0000",    


    


   "use_copyright"  => "Y"     //  ( использовать ли знак копирайта перед текстом )



   ); 

if (!is_array($arResult['SECTION'&#93)
{
    $dbRes = CIBlock::GetByID($arResult['IBLOCK_ID']
    if ($arIBlock = $dbRes->GetNext())
    {
        $arIBlock["~LIST_PAGE_URL"] = str_replace(
            array("#SERVER_NAME#", "#SITE_DIR#", "#IBLOCK_TYPE_ID#", "#IBLOCK_ID#", 
"#IBLOCK_CODE#", "#IBLOCK_EXTERNAL_ID#", "#CODE#",
            array(SITE_SERVER_NAME, SITE_DIR, $arIBlock["IBLOCK_TYPE_ID"], $arIBlock["ID"], 
$arIBlock["CODE"], $arIBlock["EXTERNAL_ID"], $arIBlock["CODE"&#93,
            strlen($arParams["IBLOCK_URL"&#93? trim($arParams["~IBLOCK_URL"&#93: $arIBlock["~LIST_PAGE_URL"]
        );
        $arIBlock["~LIST_PAGE_URL"] = preg_replace("'/+'s", "/", $arIBlock["~LIST_PAGE_URL"]
        $arIBlock["LIST_PAGE_URL"] = htmlspecialchars($arIBlock["~LIST_PAGE_URL"]
        
        $arResult['IBLOCK'] = $arIBlock;
    }
}


if(is_array($arResult["DETAIL_PICTURE"&#93)
{
    $arFileTmp = CFile::ResizeImageGet(
        $arResult['DETAIL_PICTURE'],
        array("width" => 224, 'height' => 26,
        BX_RESIZE_IMAGE_PROPORTIONAL,
        false,
       $arWaterMark
    );
    $arSize = getimagesize($_SERVER["DOCUMENT_ROOT"].$arFileTmp["src"]

    $arResult['DETAIL_PICTURE_350'] = array(
        'SRC' => $arFileTmp["src"],
        'WIDTH' => IntVal($arSize[0&#93,
        'HEIGHT' => IntVal($arSize[1&#93,
    );
}

if (is_array($arResult['MORE_PHOTO'&#93 && count($arResult['MORE_PHOTO'&#93 > 0)
{
    unset($arResult['DISPLAY_PROPERTIES']['MORE_PHOTO']

    foreach ($arResult['MORE_PHOTO'] as $key => $arFile)
    {
        $arFileTmp = CFile::ResizeImageGet(
            $arFile,
            array("width" => 85, 'height' => 85),
            BX_RESIZE_IMAGE_PROPORTIONAL,
            false,
      $arWaterMark
        );
        $arSize = getimagesize($_SERVER["DOCUMENT_ROOT"].$arFileTmp["src"]
        $arFile['PREVIEW_WIDTH'] = IntVal($arSize[0]
        $arFile['PREVIEW_HEIGHT'] = IntVal($arSize[1]

        $arFile['SRC_PREVIEW'] = $arFileTmp['src'];
        $arResult['MORE_PHOTO'][$key] = $arFile;
    }
}
$arResult['PRICES']['PRICE']['PRINT_VALUE'] =
 number_format($arResult['PROPERTIES']['PRICE']['VALUE'], 0, '.', ' ');
$arResult['PRICES']['PRICE']['PRINT_VALUE'] .= ' '.$arResult['PROPERTIES']['PRICECURRENCY']['VALUE_ENUM'];


файл template.php



Код
<div class="catalog-detail">
    <div class="catalog-item">
<?
$width = 0;
if($arParams['DETAIL_SHOW_PICTURE'] != 'N' && (is_array($arResult ["PREVIEW_PICTURE"&#93 || 
is_array($arResult ["DETAIL_PICTURE_350"&#93)):
?>
        <div class="catalog-item-image">
<?
    if(is_array($arResult ["DETAIL_PICTURE_350"&#93):
        $width = $arResult ["DETAIL_PICTURE_350"]["WIDTH"];
?>
            <img border="0" src=" <?=$arResult["DETAIL_PICTURE_350"]["SRC"] ?> " 
 width="<?=$arResult["DETAIL_PICTURE_350"]["SRC"] ?>" 
height="<?=$arResult["DETAIL_PICTURE_350"]["HEIGHT"]?>" alt="<?=$arResult["NAME"]?>" 
title="<?=$arResult["NAME"]?>" >
<?
    elseif(is_array($arResult["PREVIEW_PICTURE"&#93):
        $width = $arResult["PREVIEW_PICTURE"]["WIDTH"];
?>
            <img border="0" src="<?=$arResult["PREVIEW_PICTURE"]["SRC"]?>"
 width="<?=$arImage ["PREVIEW_PICTURE"]["WIDTH"]?>"
 height="<?=$arResult["PREVIEW_PICTURE"]["HEIGHT"]?>" 
alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" >
<?
    endif;
?>
        </div>
<?
endif;
?>
        <div class="catalog-item-desc<?=$width < 300 ? '-float' : ''?>">
<?
if($arResult["DETAIL_TEXT"&#93:
    echo $arResult["DETAIL_TEXT"];
elseif($arResult["PREVIEW_TEXT"&#93:
    echo $arResult["PREVIEW_TEXT"];
endif;
?>
        </div>
<?
foreach($arResult["PRICES"] as $code=>$arPrice):
?>
    <?if($arPrice["PRINT_VALUE"] > 0):?>
        <div class="catalog-item-price"><span><?=GetMessage('CR_PRICE')?>:</span> 
<?=$arPrice["PRINT_VALUE"]?></div>
    <?endif;?>
<?
endforeach;
?>

<?
if (is_array($arResult['DISPLAY_PROPERTIES'&#93 && count($arResult['DISPLAY_PROPERTIES'&#93 > 0):
    $cnt = 0;
    foreach($arResult["DISPLAY_PROPERTIES"] as $pid=>$arProperty):
        if ($pid != 'PRICE' && $pid != 'PRICECURRENCY'):
            if ($cnt == 0):
                $cnt++;
?>
        <div class="catalog-item-properties">
            <div class="catalog-item-properties-title"><?=GetMessage("CATALOG_CHAR"?></div>
<?
            endif;
?>

           
спросил 10 Окт, 13 от Ris (280 баллов)
А есть же модуль для этого http://marketplace.1c-bitrix.ru/solutions/studio7spb.watermark/

6 Ответы

00 голосов
Добрый день, вы проделали все изменения с файлом /bitrix/modules/main/classes/general/file.php ?
Хочу сразу предупредить, что эти изменения могут затереться при следующих обновлениях битрикса. Так что лучше переопределить эту функцию, скопировав исходный код функции ResizeImageGet в файл /bitrix/php_interface/init.php и дайте ей другое название.

По вашей ситуации - вы пропустили
пятый параметр, надо 
Код
$arFileTmp = CFile::ResizeImageGet(
        $arResult["DETAIL_PICTURE"],
        array("width" => 224, "height" => 26,)
        BX_RESIZE_IMAGE_PROPORTIONAL,
        false, 
        false,
   $arWaterMark
    );


и кстати если вы укажите 4 параметр в true, то тогда в массиве $arFileTmp
будет и ширина и высота сгенерированной картинки, т.е. не придется выполнять
Код
$arSize = getimagesize($_SERVER["DOCUMENT_ROOT"].$arFileTmp["src"];

т.е. будет что-то вроде
Код
$arFileTmp = CFile::ResizeImageGet(
        $arResult["DETAIL_PICTURE"],
        array("width" => 224, "height" => 26,)
        BX_RESIZE_IMAGE_PROPORTIONAL,
        true, 
        false,
   $arWaterMark
    );


P.S. значения в массиве $arWaterMark:

Код
"text"     => "Водяной знак!",
"color"    => "ff0000", 
"use_copyright"  => "Y"     //  ( использовать ли знак копирайта перед текстом )


имеет смысл указывать, если
Код
"type" => "text"
ответил 27 Окт, 13 от SOROKS (640 баллов)
00 голосов
Все подправил и не хочет работать (


вот исправленная функция может я тут что то не так прописал ?


Код
function ResizeImageGet($file, $arSize, $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL, $bInitSizes = false, $arFilters = false, $arWaterMark = false)
    {
        if (!is_array($file) && IntVal($file) > 0)
        {
            $dbRes = CFile::GetByID(IntVal($file));
            $file = $dbRes->Fetch();
        }

        if (!is_array($file) || !array_key_exists("FILE_NAME", $file) || StrLen($file["FILE_NAME"]) <= 0)
            return false;

        if ($resizeType != BX_RESIZE_IMAGE_EXACT && $resizeType != BX_RESIZE_IMAGE_PROPORTIONAL_ALT)
            $resizeType != BX_RESIZE_IMAGE_PROPORTIONAL;

        if (!is_array($arSize))
            $arSize = array();
        if (!array_key_exists("width", $arSize) || IntVal($arSize["width"]) <= 0)
            $arSize["width"] = 0;
        if (!array_key_exists("height", $arSize) || IntVal($arSize["height"]) <= 0)
            $arSize["height"] = 0;
        $arSize["width"] = IntVal($arSize["width"]);
        $arSize["height"] = IntVal($arSize["height"]);

        $uploadDirName = COption::GetOptionString("main", "upload_dir", "upload");

        $imageFile = "/".$uploadDirName."/".$file["SUBDIR"]."/".$file["FILE_NAME"];

        if (($arSize["width"] <= 0 || $arSize["width"] >= $file["WIDTH"])
            && ($arSize["height"] <= 0 || $arSize["height"] >= $file["HEIGHT"]))
        {
            return array("src" => $imageFile, "width" => IntVal($file["WIDTH"]), "height" => IntVal($file["HEIGHT"]));
        }

        $cacheImageFile = "/".$uploadDirName."/resize_cache/".$file["SUBDIR"]."/"
.$arSize["width"]."_".$arSize["height"]."_".$resizeType.(is_array($arFilters)? md5(serialize($arFilters)): "")
.(is_array($arWaterMark)? "_".md5(serialize($arWaterMark)): "")."/".$file["FILE_NAME"];

        $cacheImageFileCheck = $cacheImageFile;
        if ($file["CONTENT_TYPE"] == "image/bmp")
            $cacheImageFileCheck .= ".jpg";

        if (!file_exists($_SERVER["DOCUMENT_ROOT"].$cacheImageFileCheck))
        {
            /****************************** QUOTA ******************************/
            $bDiskQuota = true;
            if (COption::GetOptionInt("main", "disk_space") > 0)
            {
                $quota = new CDiskQuota();
                $bDiskQuota = $quota->checkDiskQuota($file);
            }
            /****************************** QUOTA ******************************/

            if ($bDiskQuota)
            {
                if(!is_array($arFilters))
                    $arFilters = array(
                        array("name" => "sharpen", "precision" => 15),
                    );
                $cacheImageFileTmp = $_SERVER["DOCUMENT_ROOT"].$cacheImageFile;
                if (CFile::ResizeImageFile($_SERVER["DOCUMENT_ROOT"].$imageFile, $cacheImageFileTmp, $arSize, $resizeType, 
$arWaterMark, false, $arFilters))
                {
                    $cacheImageFile = SubStr($cacheImageFileTmp, StrLen($_SERVER["DOCUMENT_ROOT"]));

                    /****************************** QUOTA ******************************/
                    if (COption::GetOptionInt("main", "disk_space") > 0)
                        CDiskQuota::updateDiskQuota("file", filesize($cacheImageFileTmp), "insert");
                    /****************************** QUOTA ******************************/
                }
                else
                {
                    $cacheImageFile = $imageFile;
                }
            }
            else
            {
                $cacheImageFile = $imageFile;
            }

            $cacheImageFileCheck = $cacheImageFile;
        }

        $arImageSize = array(0, 0);
        if ($bInitSizes)
            $arImageSize = getimagesize($_SERVER["DOCUMENT_ROOT"].$cacheImageFileCheck);

        return array("src" => $cacheImageFileCheck, "width" => IntVal($arImageSize[0]), "height" => IntVal($arImageSize[1]));
    }
ответил 31 Янв, 14 от Ris (280 баллов)
00 голосов
вроде все верно, попробуйте вместо 
Код
"file"     => "192.168.1.139/watermark.png",

указать
Код
"file"     => $_SERVER["DOCUMENT_ROOT"]."/watermark.png",


И как вариант, почистите содержимое папки /upload/resize_cache/iblock/
ответил 20 Май, 14 от SOROKS (640 баллов)
00 голосов
Все сделал и ничего ( то самое , размер сжимает картинки  но знак watermark не работает (((((((((( помогите разобраться !
ответил 16 Сен, 14 от Ris (280 баллов)
00 голосов
Только что повторил на одном из своих проектов, все отлично сработало, видимо потребуется больше информации для выяснения проблемы
ответил 21 Янв, 15 от SOROKS (640 баллов)
00 голосов
Это файлы которые я изменял , все остальные я не трогал , должно же все работать ((( сам не могу понять ....
ответил 06 Май, 15 от Ris (280 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 25 Фев, 14 от ddvfty (440 баллов)
0 голосов
1 ответ
0 голосов
1 ответ
0 голосов
1 ответ
спросил 30 Июнь, 16 от аноним
0 голосов
0 ответов