【问题标题】:Problem with watermark .JPG images in phpphp中水印.JPG图像的问题
【发布时间】:2019-10-22 18:35:52
【问题描述】:

我将此代码用于带有 PHP 上传的水印照片。如果照片是.jpg,一切都很好。如果.JPG(大写)则停止工作:

 $targetFilePath = $folderPath . $file_name; 
 $watermarkImg = imagecreatefrompng($watermarkImagePath); 

 switch($fileType){ 
     case 'jpg': 
         $im = imagecreatefromjpeg($targetFilePath); 
         break;                         
     case 'jpeg': 
         $im = imagecreatefromjpeg($targetFilePath); 
         break; 
     case 'png': 
         $im = imagecreatefrompng($targetFilePath); 
         break; 
     default: 
         $im = imagecreatefromjpeg($targetFilePath); 
 } 

 $marge_right = 1; 
 $marge_bottom = 1; 

 $sx = imagesx($watermarkImg); 
 $sy = imagesy($watermarkImg); 

 imagecopy($im, $watermarkImg, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($watermarkImg), imagesy($watermarkImg)); 

 imagejpeg($im, $targetFilePath,70); 
 imagedestroy($im); 

我尝试添加这个,但没有帮助:

 case 'JPG': 
     $im = imagecreatefromjpeg($targetFilePath); 
     break; 

请帮忙。

【问题讨论】:

  • 我假设你的 $fileType 只是一个字符串。试试 switch(strtolower($fileType)){
  • 谢谢。我试过了,但它不起作用。都一样,.JPG上没有水印
  • 也许底层函数不需要扩展名为 'JPG' 的文件?

标签: php file-upload watermark


【解决方案1】:

因为 strtolower 不起作用。 像这样使用 if/else 条件_

if(preg_match('/[.](jpg)$/i', $file_name)) {  
    $im = imagecreatefromjpeg($targetFilePath);  
} else if (preg_match('/[.](jpeg)$/i', $file_name)) {  
    $im = imagecreatefromjpeg($targetFilePath);  
} else if (preg_match('/[.](png)$/i', $file_name)) {  
    $im = imagecreatefrompng($targetFilePath);  
}  

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多