2016-11-11 237 views
5

实际上,我想要的是,当我上传1张图片时,原始图片将被存储在upload/og/中。但我也想要不同大小的图像,如1366x7681280*600768x1024等...不是这些尺寸而已,它会与该图像成比例。如何制作不同尺寸的单张图片/尺寸

我有一个代码,它将该图像转换为拇指与比例,这个作品max-width=300max-height=600

define ("MAX_SIZE","100"); 
define ("WIDTH","300"); 
define ("HEIGHT","600"); 
function make_thumb($img_name,$filename,$new_w,$new_h) 
{ 
    $ext=getExtension($img_name); 
    if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext)) 
     $src_img=imagecreatefromjpeg($img_name); 
    if(!strcmp("png",$ext)) 
     $src_img=imagecreatefrompng($img_name); 

    //gets the dimmensions of the image 
    $old_x=imageSX($src_img); 
    $old_y=imageSY($src_img); 

    // next we will calculate the new dimmensions for the thumbnail image 
    $ratio1=$old_x/$new_w; 
    $ratio2=$old_y/$new_h; 
    if($ratio1>$ratio2) { 
     $thumb_w=$new_w; 
     $thumb_h=$old_y/$ratio1; 
    } 
    else { 
     $thumb_h=$new_h; 
     $thumb_w=$old_x/$ratio2; 
    } 
    $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); 
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); // resize the big image to the new created one 

    if(!strcmp("png",$ext)) // output the created image to the file. Now we will have the thumbnail into the file named by $filename 
     imagepng($dst_img,$filename); 
    else 
     imagejpeg($dst_img,$filename); 

    imagedestroy($dst_img); 
    imagedestroy($src_img); 
} 
function getExtension($str) { 
    $i = strrpos($str,"."); 
    if (!$i) { return ""; } 
    $l = strlen($str) - $i; 
    $ext = substr($str,$i+1,$l); 
    return $ext; 
} 

$errors=0; 
if(isset($_POST['submit'])) 
    { 
    //reads the name of the file the user submitted for uploading 
    $image=$_FILES['scrnsots']['name']; 
    if ($image) 
    { 
     $filename = stripslashes($_FILES['scrnsots']['name']); 
     // get the extension of the file in a lower case format 
     $extension = getExtension($filename); 
     $extension = strtolower($extension); 
     // if it is not a known extension, we will suppose it is an error, print an error message 
     //and will not upload the file, otherwise we continue 
     if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png")) 
     { 
      echo '<h1>Unknown extension!</h1>'; 
      $errors=1; 
     } 
     else 
     { 
      $size=getimagesize($_FILES['scrnsots']['tmp_name']); 
      $sizekb=filesize($_FILES['scrnsots']['tmp_name']); 
      if ($sizekb > MAX_SIZE*102400) 
      { 
       echo '<h1>You have exceeded the size limit!</h1>'; 
       $errors=1; 
      } 
      $image_name= $image .''. time() .'.'.$extension; 
      $newname="uploads/scrnsots/".$image_name; 
      $copied = copy($_FILES['scrnsots']['tmp_name'], $newname); 
      if (!$copied) 
      { 
       echo '<h1>Copy unsuccessfull!</h1>'; 
       $errors=1; 
      } 
      else 
      { 
       $thumb_name='uploads/scrnsots/thumb/thumb-'.$image_name; 
       $thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT); 
      } 
     } 
    } 
} 
if(isset($_POST['submit']) && !$errors) 
{ 
    echo $thumb_name ."<br/>"; 


     echo "<div class='custom alert alert-success'>Successfully Added.<a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a></div>"; 
} 

但它只会创建拇指。我想要不同的图像 - 尺寸(高度 - 宽度)。

+0

你有没有试过把这个函数放在一个带有相应尺寸的循环中作为参数,它应该按照你的要求去做。 – Rasclatt

+0

对不起,兄弟。我没有足够的关于PHP的知识。但我想使网站像http://www.hdwallpapers.in/2017_wonder_woman_movie-wallpapers.html –

回答

1

这么多的尝试后,我找到了答案。通过改变以下线

else 
    { 
     $thumb_name='uploads/scrnsots/thumb/thumb-'.$image_name; 
     $thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT); 
    } 

一些事情要

else 
    { 
     $cars = array("300", "800", "1280","1366","1920"); 
     $arrlength = count($cars); 
     for($x = 0; $x < $arrlength; $x++) { 
     echo $cars[$x]; 
     $thumb_name='uploads/scrnsots/'.$cars[$x].'/thumb-'.$image_name_dash; 
     $thumb=make_thumb($newname,$thumb_name,$cars[$x],$cars[$x]); 
      list($width_main, $height_main, $type, $attr) = getimagesize($newname); 
      list($og_image_w, $og_image_h, $type, $attr) = getimagesize("$thumb_name"); 
      echo "<br>"; 
     } 
    } 

和它的作品。完美。 这个想法来自 http://www.w3schools.com/php/php_arrays.asp 我只是创建5个文件夹到我的目的地路径名为"300", "800", "1280","1366","1920"

然后,它会在特定文件夹中完美地生成特定图像。 认真,我很开心。

2

正如评论,你真的只需要把最后一部分(函数)放在一个循环中,并使用mkdir()添加一些目录创建逻辑。也有一个本地函数来提取称为pathinfo()扩展,所以只使用一个,而不是你有一个:

function make_thumb($img_name,$filename,$new_w,$new_h) 
    { 
     $ext=getExtension($img_name); 
     if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext)) 
      $src_img=imagecreatefromjpeg($img_name); 
     if(!strcmp("png",$ext)) 
      $src_img=imagecreatefrompng($img_name); 

     $old_x=imageSX($src_img); 
     $old_y=imageSY($src_img); 

     $ratio1=$old_x/$new_w; 
     $ratio2=$old_y/$new_h; 
     if($ratio1>$ratio2) { 
      $thumb_w=$new_w; 
      $thumb_h=$old_y/$ratio1; 
     } 
     else { 
      $thumb_h=$new_h; 
      $thumb_w=$old_x/$ratio2; 
     } 
     $dst_img = ImageCreateTrueColor($thumb_w,$thumb_h); 
     imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); // resize the big image to the new created one 

     if(!strcmp("png",$ext)) // output the created image to the file. Now we will have the thumbnail into the file named by $filename 
      imagepng($dst_img,$filename); 
     else 
      imagejpeg($dst_img,$filename); 

     imagedestroy($dst_img); 
     imagedestroy($src_img); 
    } 

if(!empty($_FILES)) { 
    $errors=0; 
    if($_POST['submit']) { 
     if($_FILES['scrnsots']['error'] == 0) { 
      $image = $_FILES['scrnsots']['name']; 
      $filename = stripslashes($_FILES['scrnsots']['name']); 
      $extension = pathinfo($filename,PATHINFO_EXTENSION); 
      $extension = strtolower($extension); 
      if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png")) { 
       echo '<h1>Unknown extension!</h1>'; 
       $errors=1; 
      } 
      else { 
       $size = getimagesize($_FILES['scrnsots']['tmp_name']); 
       $sizekb = filesize($_FILES['scrnsots']['tmp_name']); 
       if ($sizekb > MAX_SIZE*102400) { 
        echo '<h1>You have exceeded the size limit!</h1>'; 
        $errors=1; 
       } 

       $image_name = $image.''.time().'.'.$extension; 
       $newname = __DIR__."/uploads/scrnsots/".$image_name; 
       $basepath = pathinfo($newname,PATHINFO_DIRNAME); 
       # Create the folder if not already made 
       if(!is_dir($basepath)) 
        mkdir($basepath,0755,true); 
       # It's more common to use this function here instead of copy() 
       if (!move_uploaded_file($_FILES['scrnsots']['tmp_name'], $newname)) { 
        echo '<h1>Copy unsuccessfull!</h1>'; 
        $errors=1; 
       } 
       else { 
        # Have your sizes here 
        $sizes = array(
         array(1366,768), 
         array(1280,600), 
         array(768,1024) 
        ); 
        # Loop through your sizes here and apply your function 
        foreach($sizes as $hw) { 
         $thumb_name = __DIR__.'/uploads/scrnsots/thumb/'.$hw[0].$hw[1].'/thumb-'.$image_name; 
         $thumb_path = pathinfo($thumb_name,PATHINFO_DIRNAME); 
         # Create the thumbnail directory(s) if not exist 
         if(!is_dir($thumb_path)) 
          mkdir($thumb_path,0755,true); 
         # Run your function 
         make_thumb($newname,$thumb_name,$hw[0],$hw[1]); 
        } 
       } 
      } 
     } 
    } 
}