Cod de redimensionare a unei imagini prin PHP (are nevoie de biblioteca grafică GD pentru a funcţiona). Rezultatul este un octet-stream, ceea ce înseamnă că apelul la redimensionarea imaginii poate fi inclus în codul HTML ca src al unei imagini (ca şi cum în site s-ar include o imagine standard). Din nou, sper sa fie de folos cuiva (daca este, lasati si voi un comentariu cu opinia asupra codului).
Fişier: minipic.php
<?php /** * Parametrii la care va fi redimensionata imaginea **/ $output_width = (isset($_REQUEST['w']) && is_numeric($_REQUEST['w'])) ? $_REQUEST['w'] : 150; $output_height = (isset($_REQUEST['h']) && is_numeric($_REQUEST['h'])) ? $_REQUEST['h'] : 150; /** * Imaginea originala si array-ul cu proprietatile imaginii **/ $path = ((isset($_REQUEST['path']))? $_REQUEST['path'] : ""); $size_arr = getimagesize($path); if ($size_arr[2]==IMAGETYPE_GIF) $image = imagecreatefromgif($path); else if ($size_arr[2]==IMAGETYPE_JPEG) $image = imagecreatefromjpeg($path); else if ($size_arr[2]==IMAGETYPE_PNG) $image = imagecreatefrompng($path); else die_default_image(); $tmp = tempnam(sys_get_temp_dir(), "phptmp"); resize_image($tmp, $image, $size_arr, $output_width, $output_height); /** * Setarea header-ului si returnarea continutului **/ header('Content-Type: image/jpg'); header('Content-Disposition: inline; filename="'.basename($path).'"'); echo file_get_contents($tmpname); unlink($tmp); die(''); /** * IMAGINE DEFAULT - In caz de eroare, gif transparent de 1x1 pixeli **/ function die_default_image() { header("content-type: image/gif"); echo base64_decode("R0lGODlhAQABAIAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); } /** * Functia de redimensionare a imaginii * Format JPEG, calitate 80% **/ function resize_image($thumbname, $image, $size_arr, $max_width, $max_height) { // Mentinerea aspectului $width = $max_width; $height = $max_height; list($width_orig, $height_orig, $img_type) = $size_arr; $ratio_orig = $width_orig/$height_orig; if ($width/$height > $ratio_orig) $width = floor($height*$ratio_orig); else $height = floor($width/$ratio_orig); // Redimensionarea $tempimg = imagecreatetruecolor($width, $height); imagecopyresampled($tempimg, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); imagejpeg($tempimg, $thumbname, 80); } /** * Pentru versiuni PHP mai vech, definire director temporar **/ if (!function_exists('sys_get_temp_dir')) { function sys_get_temp_dir() { if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); } if (!empty($_ENV['TMPDIR'])) { return realpath($_ENV['TMPDIR']); } if (!empty($_ENV['TEMP'])) { return realpath($_ENV['TEMP']); } $tempfile = tempnam(uniqid(rand(),TRUE),''); if (file_exists($tempfile)) { unlink($tempfile); return realpath(dirname($tempfile)); } } } ?>
Note:
- script-ul păstrează aspectul imaginii
- dimensiuni default, dacă se omit "h" şi "w": 150 x 150 pixeli
- în exemplu: imagine finală de 100 x 100 pixeli
Apelul:
http://myDomain.tld/minipic.php?h=100&w=100&path=http://test.images/image.png
<img src="http://myDomain.tld/minipic.php?h=100&w=100&path=http://test.images/image.png" alt="imaginea_mea" />
Un comentariu:
Patch pentru serverele care nu au activata optiunea allow_url_fopen
function save_image($img,$fullpath){
$ch = curl_init ($img);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata=curl_exec($ch);
curl_close ($ch);
if(file_exists($fullpath)){
unlink($fullpath);
}
$fp = fopen($fullpath,'x');
fwrite($fp, $rawdata);
fclose($fp);
}
Si in locul liniei $size_arr = getimagesize($path);
$imageFile = rtrim(sys_get_temp_dir(),'/')."/tmpImage";
save_image($path, $imageFile);
$size_arr = getimagesize($imageFile);
Trimiteți un comentariu