当前位置: 首页 > 知识库问答 >
问题:

图像未保存在上传文件夹[重复]

彭仲卿
2023-03-14

我试图将不同类别的图像保存在一个文件夹中,并检索它们。

  <?php
    if(isset($_POST['submit'])){
     $cat=$_POST['cat'];

    $fname= $_FILES["file"]["name"];
    "Type: " . $_FILES["file"]["type"] . "<br />";
    "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    "stored in: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
       "Stored in: " . "upload/" . $_FILES["file"]["name"];
     echo 'image Save Successfully' ;   

    require_once( "watermark.php" );


    $original_directory = "upload/";
    $watermarked_images = "temp/";

    if ($handle = opendir($original_directory)) 
    {
        while (false !== ($file = readdir($handle))) 
        {

            if(!is_file($original_directory.$file))
                continue;
            if(exif_imagetype($original_directory.$file)==2)
            {
                watermark($original_directory.$file,"watermark.png",$watermarked_images.$file);
                //echo "Done watermarking <b>".$file."</b><br>\n";
            }
        }
        closedir($handle);
    }
    }
   }
   ?> 

watermark.php是

     <?php
     function watermark($original_image,$original_watermark,$destination="")
        {
            $image=imagecreatefromjpeg($original_image);
            list($imagewidth,$imageheight)=getimagesize($original_image);

            $watermark  =   imagecreatefrompng($original_watermark);            
            list($watermarkwidth,$watermarkheight)=getimagesize($original_watermark);

            if($watermarkwidth>$imagewidth || $watermarkheight>$imageheight)
            {
                $water_resize_factor = $imagewidth / $watermarkwidth;
                $new_watermarkwidth  = $watermarkwidth * $water_resize_factor;
                $new_watermarkheight = $watermarkheight * $water_resize_factor;

                $new_watermark = imagecreatetruecolor($new_watermarkwidth , $new_watermarkheight);

                imagealphablending($new_watermark , false);
                imagecopyresampled($new_watermark , $watermark, 0, 0, 0, 0, $new_watermarkwidth, $new_watermarkheight, $watermarkwidth, $watermarkheight);

                $watermarkwidth  = $new_watermarkwidth; 
                $watermarkheight = $new_watermarkheight; 
                $watermark       = $new_watermark;
            }
            $startwidth     =   ($imagewidth    -   $watermarkwidth)  / 2; 
            $startheight    =   ($imageheight   -   $watermarkheight) / 2;

            imagecopy($image, $watermark, $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight); 
            if(!empty($destination))
                imagejpeg($image,$destination);
            else 
                imagejpeg($image);
        }   
?>

一些图像被保存在上传文件夹和临时文件夹和数据库中,并且水印被应用在它们上...但是现在当我试图上传图像时...它只在上传文件夹中,并且显示一个致命的错误:-

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 15000 bytes) in D:\xampp\htdocs\looks\admin\watermark.php on line 28

我怎样才能解决这个问题。。并且.PNG图像也没有保存

共有2个答案

夏意蕴
2023-03-14

这意味着当前的RAM限制对于生成水印的PHP脚本来说是不够的。

转到php.ini,找到“memory_limit”并将该行更改为类似的内容:

memory_limit = 256M;

之后,重新启动Apache。

皇甫俊雅
2023-03-14

在服务器中上载时可能会出现问题。您可以使用

    <?php
function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile) { 
   list($width, $height) = getimagesize($SourceFile);
   $image_p = imagecreatetruecolor($width, $height);
   $image = imagecreatefromjpeg($SourceFile);
   imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
   $black = imagecolorallocate($image_p, 0, 0, 0);
   $font = 'arial.ttf';
   $font_size = 10; 
   imagettftext($image_p, $font_size, 0, 10, 20, $black, $font, $WaterMarkText);
   if ($DestinationFile<>'') {
      imagejpeg ($image_p, $DestinationFile, 100); 
   } else {
      header('Content-Type: image/jpeg');
      imagejpeg($image_p, null, 100);
   };
   imagedestroy($image); 
   imagedestroy($image_p); 
};
?>

您需要下载arial.ttf文件并将其上传到服务器上。然后新建一个PHP文件,将上面的函数复制粘贴在里面。接下来的4行用于设置源文件、水印文本消息和目的地文件。如果您只想显示带水印的图像,您需要将$DestinationFile变量留空($DestinationFile=''; ).此外,请确保源文件和目标文件包括完整的服务器路径和图像文件名。如果你想改变水印信息在你的图像上的位置,你可以改变行Imagettftext($image_p,$font_size,0,10,20,$黑色,$字体,$WaterMarkText);

    <?php
$SourceFile = '/home/user/www/images/image1.jpg';
$DestinationFile = '/home/user/www/images/image1-watermark.jpg'; 
$WaterMarkText = 'Copyright phpJabbers.com';
watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile);
?>
 类似资料:
  • 这里是我的代码,在那里我已经尝试了几个小时,将上传的图像保存在不同大小的服务器文件夹中。但是,图像没有被保存,并且无法得到它出错的地方。以前,我使用二进制代码编写,如下面的第二个代码部分所示,通过从移动端以某种方式带来二进制数据(图片是从相机中获取的,并从移动端即时发送)。但随着数据的增加。我决定使用甚至上传图像文件与多部分类型的文件上传从我的移动端。 但下面的工作与我以前获取二进制数据时的相同函

  • 这是一个使用ajax调用的spring项目。我想把上传的图像保存在resources/images文件夹中。以下是我的控制器: 文件被上传并显示在index.jsp中。但它不存储在资源/图像文件夹中。 下面是我的index.jsp 模型是: 它显示了一个错误: 对于路径为[/SimpleAjaxJQueryPicUpload]的上下文中的servlet[dispatcher]的servlet.Se

  • 我可以上传图片在数据库,但不能上传到“文件”文件夹。万维网 这是图像上传servlet。一旦图像被上传,它就应该被插入到files文件夹中。我不知道我犯了什么错误。谁能告诉我出了什么问题吗?我需要添加上传目录或文件路径C:inside吗?

  • 我有这段代码: 问题1: 奇怪的是,只要我在上使用,它就可以工作。 当我切换到而不是时,它就不起作用(该文件不会写入数据库(通过spring-data-r2dbc))。 为什么会这样? 问题2: 当我想在保存到数据库后执行另一个操作(将文件保存到minio容器)时,如何将其链接到给定的代码中?另一个?

  • 问题 上传文件,并将其保存到预先设定的某个目录下。 方法 import web urls = ('/upload', 'Upload') class Upload: def GET(self): web.header("Content-Type","text/html; charset=utf-8") return """<html><head></he

  • 我试图用一个标志图像存储一些细节,因为我已经创建了一个方法,并在我的本地系统中使用它,它似乎在那里工作得很好。但是当我把我的代码上传到云上的时候。我正在使用Heroku来承载我的web应用程序,它给了我一个错误。