RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1581328
Accepted
Валерий
Валерий
Asked:2024-05-23 17:02:22 +0000 UTC2024-05-23 17:02:22 +0000 UTC 2024-05-23 17:02:22 +0000 UTC

将图像加载到 png 时: imagesx(): 参数 #1 ($image) 必须是 GdImage 类型,给定 bool

  • 772

我需要你的帮助。init.php 中有一个函数,可以在创建和更新产品时为图像添加水印。你以jpg格式上传,一切都很好,但它不想以png格式加载。

初始化文件

class SrWatermark
{
   static function OnBeforeIBlockElementAdd (&$arFields)
   {
      if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && $arFields["PROPERTY_VALUES"][71][0]["VALUE"] != 79)
      {
         $filepath = $arFields["DETAIL_PICTURE"]["tmp_name"];
         $result = tempnam("/tmp", "FOO").".jpg";

         $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

         $watermark = new watermark1();
         $img = imagecreatefromjpeg($filepath);
         $im = $watermark->create_watermark($img, "www.profinventar.ru", $font); ('/var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/init.php:205' - эта ошибка ругается на эту строку)
         $rez = imagejpeg($im, $result, 100);
         if ($rez)
         $arFields["DETAIL_PICTURE"]["tmp_name"] = $result;
      }

     // MORE_PHOTO resize and watermark

     foreach($arFields["PROPERTY_VALUES"]["6"] as $pid=>$arProperty)
     {
        if (strlen($arProperty["VALUE"]["tmp_name"]) > 0)
        {
          $filepath = $arProperty["VALUE"]["tmp_name"];
          // resize
          $imageMaxWidth = 800;
          $imageMaxHeight = 800;
          $imsize = getimagesize($filepath);
          if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight)
          {
            $arFile = CFile::MakeFileArray($filepath);
            $arNewFile = CIBlock::ResizePicture($arFile, array(
               "WIDTH" => $imageMaxWidth,
               "HEIGHT" => $imageMaxHeight,
               "METHOD" => "resample",
            ));
          }
          // watermark
          $result = tempnam("/tmp", "FOO").".jpg";
          $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

          $watermark = new watermark1();
          $img = imagecreatefromjpeg($filepath);
          $im = $watermark->create_watermark($img, "www.profinventar.ru", $font);
          $rez = imagejpeg($im, $result, 100);
             AddMessage2Log($rez,"");
          if ($rez)
          $arFields["PROPERTY_VALUES"]["6"][$pid]["VALUE"]["tmp_name"] = $result;
        }
     }
   }

   static function OnBeforeIBlockElementUpdate (&$arFields)
   {
      //AddMessage2Log("<br/><br/><pre>".print_r($arFields,true)."</pre><br/><br/>", "test");
      
      if (strlen($arFields["DETAIL_PICTURE"]["tmp_name"]) > 0 && $arFields["PROPERTY_VALUES"][71][0]["VALUE"] != 79)
      {
         $filepath = $arFields["DETAIL_PICTURE"]["tmp_name"];
         $result = tempnam("/tmp", "FOO").".jpg";
         $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

         $watermark = new watermark1();
         $img = imagecreatefromjpeg($filepath);
         $im = $watermark->create_watermark($img, "www.profinventar.ru", $font);
         $rez = imagejpeg($im, $result, 100);

         if ($rez)
         $arFields["DETAIL_PICTURE"]["tmp_name"] = $result;
      }

     // MORE_PHOTO resize and watermark

     foreach($arFields["PROPERTY_VALUES"]["6"] as $pid=>$arProperty)
     {
        if (strlen($arProperty["VALUE"]["tmp_name"]) > 0)
        {
          $filepath = $arProperty["VALUE"]["tmp_name"];
          // resize
          $imageMaxWidth = 800;
          $imageMaxHeight = 800;
          $imsize = getimagesize($filepath);
          if($imsize[0] > $imageMaxWidth or $imsize[1] > $imageMaxHeight)
          {
            $arFile = CFile::MakeFileArray($filepath);
            $arNewFile = CIBlock::ResizePicture($arFile, array(
               "WIDTH" => $imageMaxWidth,
               "HEIGHT" => $imageMaxHeight,
               "METHOD" => "resample",
            ));
          }
          // watermark
          $result = tempnam("/tmp", "FOO").".jpg";
          $font = $_SERVER['DOCUMENT_ROOT']."/arial.ttf";

          $watermark = new watermark1();
          $img = imagecreatefromjpeg($filepath);
          $im = $watermark->create_watermark($img, "www.profinventar.ru", $font);
          $rez = imagejpeg($im, $result, 100);
             AddMessage2Log($rez,"");
          if ($rez)
          $arFields["PROPERTY_VALUES"]["6"][$pid]["VALUE"]["tmp_name"] = $result;
        }
     }
   }
}

出现以下错误

 [TypeError] 
imagesx(): Argument #1 ($image) must be of type GdImage, bool given (0)
/var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/lib/watermark.php:6
#0: imagesx(boolean)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/lib/watermark.php:6
#1: watermark1->create_watermark(boolean, string, string)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/php_interface/init.php:205
#2: SrWatermark::OnBeforeIBlockElementAdd(array)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/main/tools.php:4734
#3: ExecuteModuleEventEx(array, array)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/iblock/classes/general/iblockelement.php:5202
#4: CAllIBlockElement->CheckFields(array)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/iblock/classes/general/iblockelement.php:3970
#5: CAllIBlockElement->Add(array, boolean, boolean, boolean)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/modules/iblock/admin/iblock_element_edit.php:1193
#6: require(string)
    /var/www/u2487576/data/www/profinventar.ru/bitrix/admin/iblock_element_edit.php:1

水印.php

class watermark1   
{   
   function create_watermark($main_img_obj, $text, $font, $r = 128, $g = 128, $b = 128, $alpha_level = 100 )   
   {   
      $width = imagesx($main_img_obj);   
      $height = imagesy($main_img_obj);   
      $angle =  -rad2deg(atan2((-$height),($width)));   

      $text = " ".$text." ";   
      
      $c = imagecolorallocatealpha($main_img_obj, $r, $g, $b, $alpha_level);   

      $size = ( ($width+$height) / 2 ) * 2 / strlen($text) - 2; 
      $box  = imagettfbbox ($size, $angle, $font, $text );   

      $x = $width/2 - abs($box[4] - $box[0])/2;   
      $y = $height/2 + abs($box[5] - $box[1])/2;   
      
      imagettftext($main_img_obj,$size ,$angle, $x, $y, $c, $font, $text);   
      return $main_img_obj;   
   }   
}
битрикс
  • 1 1 个回答
  • 11 Views

1 个回答

  • Voted
  1. Best Answer
    Виктор Карев
    2024-05-23T20:39:57Z2024-05-23T20:39:57Z

    因为您正在使用$img = imagecreatefromjpeg($filepath);从 jpeg 文件加载。很明显,这个函数不理解 png 文件格式。

    保持简单,使用 CFile::ResizeImageFileGet() 函数。她会缩放它并添加水印。例如,像这样:

    $arFilter = [[
        'name' => 'watermark',
        'position' => 'center',
        'size' => 'real',
        'alpha_level' => 20,
        'file' => $_SERVER['DOCUMENT_ROOT'] . '/images/watermark.jpg'
    ]];
    $photoUrl = CFile::ResizeImageGet($arFile , ['width' => 1200, 'height' => 720],
        BX_RESIZE_IMAGE_PROPORTIONAL_ALT, false, $arFilter);
    
    

    并且最好不要用水印破坏图片,而是在显示页面时添加水印。这样,如有必要,您可以轻松替换水印、在预览中显示替代水印或将其从预览中删除。

    • 0

相关问题

  • Bitrix 中的 urlrewrite 问题

  • Bitrix 中 catalog.item 的设置

  • 如何创建一个部分

  • Bitrix产品卡上的商品数量怎么去掉?

  • Bitrix 发送有关已完成订单的不可读消息

  • 没有id的产品展示-bitrix

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5