How to make a single image in different sizes / sizes

Actually, I want that when uploading 1 image, the original image will be stored in upload/og/ . But I also want an image of different sizes, for example 1366x768 , 1280*600 , 768x1024 , etc ... but not only these measurements, it will be a proportional ratio of this image.

I have one code that converts this image into a thumb with a ratio, this works max-width=300 and max-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>"; } 

but it will only create a thumb. I want 1 image in different - dimensions (height - width).

+5
source share
2 answers

after such an attempt, I found the answer. by changing some elements below the lines

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

to

  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>"; } } 

and it works. perfectly. this idea comes from http://www.w3schools.com/php/php_arrays.asp I just create 5 folders in my target path named "300", "800", "1280","1366","1920" .

Then what, it perfectly generates certain images in a specific folder. seriously, i'm so happy.

+1
source

As commented, you only need to put the last part (function) in the loop and add the directory creation logic using mkdir() . There is also a built-in function to extract the extension named pathinfo() , so just use the one and not the one you have:

 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 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]); } } } } } } 
+2
source

Source: https://habr.com/ru/post/1259574/


All Articles