You are here

protected function Upload::imageWaterMark in UEditor - 百度编辑器 8

1 call to Upload::imageWaterMark()
Upload::addWatermark in src/Uploader/Upload.php
添加水印

File

src/Uploader/Upload.php, line 250

Class

Upload
UEditor编辑器通用上传类

Namespace

Drupal\ueditor\Uploader

Code

protected function imageWaterMark($groundImage, $waterPos = 0, $waterImage = '', $wateralpha = '', $waterText = '', $fontSize = '', $textColor = '') {
  $isWaterImage = FALSE;

  //读取水印文件
  if (!empty($waterImage) && file_exists($waterImage)) {
    $isWaterImage = TRUE;
    $water_info = getimagesize($waterImage);

    //取得水印图片的宽
    $water_w = $water_info[0];

    //取得水印图片的高
    $water_h = $water_info[1];

    //取得水印图片的格式
    switch ($water_info[2]) {
      case 1:
        $water_im = imagecreatefromgif($waterImage);
        break;
      case 2:
        $water_im = imagecreatefromjpeg($waterImage);
        break;
      case 3:
        $water_im = imagecreatefrompng($waterImage);
        break;
      default:
        return "ERROR_TYPE_NOT_ALLOWED";
    }
  }

  //读取背景图片
  if (!empty($groundImage) && file_exists($groundImage)) {
    $ground_info = getimagesize($groundImage);

    //取得背景图片的宽
    $ground_w = $ground_info[0];

    //取得背景图片的高
    $ground_h = $ground_info[1];

    //取得背景图片的格式
    switch ($ground_info[2]) {
      case 1:
        $ground_im = imagecreatefromgif($groundImage);
        break;
      case 2:
        $ground_im = imagecreatefromjpeg($groundImage);
        break;
      case 3:
        $ground_im = imagecreatefrompng($groundImage);
        break;
      default:
        return "ERROR_TYPE_NOT_ALLOWED";
    }
  }
  else {
    return "ERROR_WATERMARK_NOT_FOUND";
  }

  //水印位置

  //图片水印
  if ($isWaterImage) {
    $w = $water_w;
    $h = $water_h;
    $label = "图片的";
  }
  else {

    //文字水印
    $fontface = drupal_get_path('module', 'ueditor') . '/fonts/fzcyjt.ttf';
    $temp = imagettfbbox(ceil($fontSize * 1.2), 0, $fontface, $waterText);

    //取得使用 TrueType 字体的文本的范围
    $w = $temp[2] - $temp[6];
    $h = $temp[3] - $temp[7];
    unset($temp);
    $label = "文字区域";
  }
  if ($ground_w < $w || $ground_h < $h) {

    //echo "需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!";
    return "ERROR_WATERMARK_SIZE";
  }
  switch ($waterPos) {
    case 0:

      //随机
      $posX = rand(0, $ground_w - $w);
      $posY = rand(0, $ground_h - $h);
      break;
    case 1:

      //1为顶端居左
      $posX = 10;
      $posY = $h + 10;
      break;
    case 2:

      //2为顶端居中
      $posX = ($ground_w - $w) / 2;
      $posY = $h + 10;
      break;
    case 3:

      //3为顶端居右
      $posX = $ground_w - $w;
      $posY = $h + 10;
      break;
    case 4:

      //4为中部居左
      $posX = 10;
      $posY = ($ground_h - $h) / 2;
      break;
    case 5:

      //5为中部居中
      $posX = ($ground_w - $w) / 2;
      $posY = ($ground_h - $h) / 2;
      break;
    case 6:

      //6为中部居右
      $posX = $ground_w - $w;
      $posY = ($ground_h - $h) / 2;
      break;
    case 7:

      //7为底端居左
      $posX = 10;
      $posY = $ground_h - $h;
      break;
    case 8:

      //8为底端居中
      $posX = ($ground_w - $w) / 2;
      $posY = $ground_h - $h;
      break;
    case 9:

      //9为底端居右
      $posX = $ground_w - $w - 10;

      // -10 是距离右侧10px 可以自己调节
      $posY = $ground_h - $h - 10;

      // -10 是距离底部10px 可以自己调节
      break;
    default:

      //随机
      $posX = rand(0, $ground_w - $w);
      $posY = rand(0, $ground_h - $h);
      break;
  }

  //设定图像的混色模式
  imagealphablending($ground_im, true);

  //图片水印
  if ($isWaterImage) {
    imagecopymerge($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h, $wateralpha);

    //拷贝水印到目标文件
  }
  else {

    //文字水印
    if (!empty($textColor) && strlen($textColor) == 7) {
      $R = hexdec(substr($textColor, 1, 2));
      $G = hexdec(substr($textColor, 3, 2));
      $B = hexdec(substr($textColor, 5));
    }
    else {
      return "ERROR_WATERMARK_TEXT_RGB";
    }
    imagettftext($ground_im, $fontSize, 0, $posX, $posY, imagecolorallocate($ground_im, $R, $G, $B), $fontface, $waterText);
  }

  //生成水印后的图片
  @unlink($groundImage);

  //取得背景图片的格式
  switch ($ground_info[2]) {
    case 1:
      imagegif($ground_im, $groundImage);
      break;
    case 2:
      imagejpeg($ground_im, $groundImage);
      break;
    case 3:
      imagepng($ground_im, $groundImage);
      break;
    default:
      return "ERROR_WATERMARK_ADD";
  }

  //释放内存
  if (isset($water_info)) {
    unset($water_info);
  }
  if (isset($water_im)) {
    imagedestroy($water_im);
  }
  unset($ground_info);
  imagedestroy($ground_im);
  return TRUE;
}