如何更改存储文件的名称

时间:2011-07-22 13:02:28

标签: php image-processing

我正在使用图片上传和从某人博客调整脚本大小。它将文件的名称存储为resize.jpg。但是我想给它们提供唯一的名称,因为数据会进入数据库......我使用函数非常糟糕,所以请指导我。

 <?php
    class SimpleImage {

     var $image;
     var $image_type;

     function load($filename) {

      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {

         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {

         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {

         $this->image = imagecreatefrompng($filename);
      }
   }
            function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75,     $permissions=null) {

      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image,$filename,$compression);
      } elseif( $image_type == IMAGETYPE_GIF ) {

         imagegif($this->image,$filename);
      } elseif( $image_type == IMAGETYPE_PNG ) {

         imagepng($this->image,$filename);
      }
      if( $permissions != null) {

         chmod($filename,$permissions);
      }
   }
   function output($image_type=IMAGETYPE_JPEG) {

      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image);
      } elseif( $image_type == IMAGETYPE_GIF ) {

         imagegif($this->image);
      } elseif( $image_type == IMAGETYPE_PNG ) {

         imagepng($this->image);
      }
    }
       function getWidth() {

      return imagesx($this->image);
      }
      function getHeight() {

      return imagesy($this->image);
      }
       function resizeToHeight($height) {

      $ratio = $height / $this->getHeight();
      $width = $this->getWidth() * $ratio;
      $this->resize($width,$height);
   }

   function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }

   function scale($scale) {
      $width = $this->getWidth() * $scale/100;
      $height = $this->getheight() * $scale/100;
      $this->resize($width,$height);
   }

   function resize($width,$height) {
      $new_image = imagecreatetruecolor($width, $height);
      imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
      $this->image = $new_image;
   }      

}
?>  
<?php
   if( isset($_POST['submit']) ) {
      include('SimpleImage.php');
      $image = new SimpleImage();
      $image->load($_FILES['uploaded_image']['tmp_name']);
      $image->resizeToWidth(300);
      $image->resizeToHeight(200);
      $image->save('images/resize.jpg');
      //$image->output();
   } else {
?>   <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="uploaded_image" />
      <input type="submit" name="submit" value="Upload" />
   </form><?php
   }
?>

2 个答案:

答案 0 :(得分:1)

在此块中,您将每个保存为resize.jpg

  $image->resizeToWidth(300);
  $image->resizeToHeight(200);
  $image->save('images/resize.jpg');

您可以使用uniqid()生成唯一名称,并可选择在img_上添加前缀。您的文件名将如下所示:

'img_4e297753130db.jpg'

首先生成保存在变量中的文件名。

$prefix = "img_"
$new_filename = uniqid($prefix) . ".jpg";

// Do your other processing
// ...
$image->resizeToWidth(300);
$image->resizeToHeight(200);

// Save with the new filename
// Note change to double quotes from single...
$image->save("images/$new_filename");

稍后,当您准备将文件名存储在数据库中时,它仍可在$new_filename

中使用

答案 1 :(得分:0)

图像名称在此行中设置:

$image->save('images/resize.jpg');

您需要确定如何命名输出文件,并修改该行以生成所需的输出。

如果您可以提供有关您的陈述的更具体的详细信息“我想提供唯一的名称”,请更新您的问题。