यह एक बहुत ही मजबूत रूटीन है जो 2 छवियों का पूर्वावलोकन और बड़ा बनाता है।
यह सबसे छोटे आउटपुट के लिए 3 छवि प्रकारों की भी जांच करता है। मुझे परवाह नहीं है कि छवि किस प्रारूप में है जैसा कि मैंने इसे HTML पृष्ठ में बेस 64 के रूप में रखा है।
यह छवियों को बेस 64 में परिवर्तित करता है और उन्हें एक SQL तालिका में सहेजता है और बेस 64 छवि को एक HTML पृष्ठ पर सहेजता है।
जबकि यह स्केलिंग करता है, चित्रों को समीक्षा के लिए प्रदर्शित किया जाता है।
ऐसा लगता है कि मेरे कोड को समझने के लिए आपको इसके बारे में पर्याप्त जानकारी है।
मैं इस पर टिप्पणी कर सकता हूं।
$thumbWidth = 60;
$thumbHeight = 60;
$previewWidth = 200;
$previewHeight = 150;
$bigWidth = 800;
$bigHeight = 600;
if( is_uploaded_file($_FILES['ava']['tmp_name']) || !($_FILES['ava']['error'] !== UPLOAD_ERR_OK)){
$save = false;
$jspan = '';
$gspan = '';
$pspan = '';
छवि के प्रकार को उसके MIME प्रकार से प्राप्त करें।
फिर imagecreatefrom का उपयोग करके फिर से जांच करें
एक्सटेंशन के बावजूद, MIME प्रकार, यदि यह एक छवि jpg, png, या gif है, तो यह सकारात्मक रूप से प्रकार की पहचान करेगा।
switch(strtolower($_FILES['ava']['type'])){
case 'image/jpeg':
$image = @imagecreatefromjpeg($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
case 'image/png':
$image = @imagecreatefrompng($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
case 'image/gif':
$image = @imagecreatefromgif($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
default:
$img = @getimagesize($_FILES['ava']['tmp_name']);
switch(strtolower($img['mime'])){
case 'image/jpeg':
$image = @imagecreatefromjpeg($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
case 'image/png':
$image = @imagecreatefrompng($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
case 'image/gif':
$image = @imagecreatefromgif($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
default:
$filename = $_FILES['ava']['name'];
$ext = substr($filename,-3);
switch(strtolower($ext)){
case 'jpg':
$image = @imagecreatefromjpeg($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
case 'gif':
$image = @imagecreatefromgif($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
case 'png':
$image = @imagecreatefrompng($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
default:
$image = @imagecreatefromjpeg($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
$image = @imagecreatefrompng($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
$image = @imagecreatefromgif($_FILES['ava']['tmp_name']);
if ($image !== false){$save = true;break;}
}
}
}
}
पूर्वावलोकन आकार के लिए स्केल करें
if ($save === true){
$originalWidth = imagesx($image);
$originalHeight = imagesy($image);
$scale = min($previewWidth/$originalWidth, $previewHeight/$originalHeight);
$newWidth = ceil($scale*$originalWidth);
$newHeight = ceil($scale*$originalHeight);
$newPic = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newPic, $image,0, 0, 0, 0,$newWidth, $newHeight, $originalWidth, $originalHeight);
ob_start();
imagejpeg($newPic, NULL, 70);
$jpg = ob_get_clean();
ob_clean();
ob_end_flush();
$jLen = strlen($jpg);
ob_start();
imagepng($newPic, NULL, 9);
$png = ob_get_clean();
ob_clean();
ob_end_flush();
$pLen = strlen($png);
ob_start();
imagegif($newPic);
$gif = ob_get_clean();
ob_clean();
ob_end_flush();
जांचें कि किस प्रकार की छवि बाइट्स की सबसे छोटी संख्या बनाती है
$gLen = strlen($gif);
if ($gLen < $jLen){
if ($pLen < $gLen){
$raw = $png;
$png = null;
$type = 'png';
$pspan = '<span class="size">';
}
else{
$raw = $gif;
$gif = null;
$type = 'gif';
$gspan = '<span class="size">';
}
}
elseif($pLen < $jLen){
$raw = $png;
$png = null;
$type = 'png';
$pspan = '<span class="size">';
}
else{
$raw = $jpg;
$jpg = null;
$type = 'jpg';
$jspan = '<span class="size">';
}
बेस64 में कनवर्ट करें और सहेजें
मैं अपने एचटीएमएल पेजों में बेस 64 छवियों का उपयोग करता हूं। यह प्रत्येक छवि के लिए HTTP राउंड ट्रिप को समाप्त करता है।
नायसेर्स शिकायत करते हैं कि बेस 64 छवि आकार में 30% जोड़ता है। और यह करता है।
जब बेस 64 को HTML में एम्बेड किया जाता है, तो यह zgipped हो जाता है। और अतिरिक्त 30% को gzip द्वारा बहुत कम संकुचित किया जाता है, विशिष्ट रूप से केवल कुछ प्रतिशत।
एक HTTP राउंड ट्रिप सर्वर से सर्वर, दिन के समय आदि में भिन्न होता है, लेकिन आमतौर पर 200 मिलीसेकंड। बेस 64 का प्रसारण समय आमतौर पर केवल कुछ मिलीसेकंड होता है।
$base64 = base64_encode($raw);
$thumb1 = "<img width=\"$newWidth\" height=\"$newHeight\" src=\"data:image/$type;base64,$base64\" alt =\"profile thumb one\"/>";
$size = 'Thumb';
echo "<p>Image $num $size <br>$jspan jpg: $jLen bytes</span>, <br>$gspan gif: $gLen bytes</span>, <br>$pspan png: $pLen bytes</span></p> $thumb1";
$filename = 'thumb1.' . $type;
$fp = fopen($filename ,"w");
fwrite($fp, $raw);
fclose($fp);
imagedestroy($newPic);
$filename = "thumb1_$type.html";
$fp = fopen($filename ,"w");
fwrite($fp, $thumb1);
fclose($fp);
$thumb1 = mysql_escape_string($thumb1);
@mysql_unbuffered_query("UPDATE `photos` SET `thumb1`='$thumb1' WHERE `id`=$id");
बड़ी छवि के पैमाने पर:
$scale = min($bigWidth/$originalWidth, $bigHeight/$originalHeight);
$newWidth = ceil($scale*$originalWidth);
$newHeight = ceil($scale*$originalHeight);
$newPic = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newPic, $image,0, 0, 0, 0,$newWidth, $newHeight, $originalWidth, $originalHeight);
ob_start();
imagejpeg($newPic, NULL, 70);
$jpg = ob_get_clean();
ob_clean();
ob_end_flush();
$jLen = strlen($jpg);
ob_start();
imagepng($newPic, NULL, 9);
$png = ob_get_clean();
ob_clean();
ob_end_flush();
$pLen = strlen($png);
ob_start();
imagegif($newPic);
$gif = ob_get_clean();
ob_clean();
ob_end_flush();
$gLen = strlen($gif);
if ($gLen < $jLen){
if ($pLen < $gLen){
$raw = $png;
$png = null;
$type = 'png';
$pspan = '<span class="size">';
}
else{
$raw = $gif;
$gif = null;
$type = 'gif';
$gspan = '<span class="size">';
}
}
elseif($pLen < $jLen){
$raw = $png;
$png = null;
$type = 'png';
$pspan = '<span class="size">';
}
else{
$raw = $jpg;
$jpg = null;
$type = 'jpg';
$jspan = '<span class="size">';
}
$base64 = base64_encode($raw);
$size = 'Full Size';
$filename = 'big1.' . $type;
$big1 = "<img width=\"$newWidth\" height=\"$newHeight\" src=\"data:image/$type;base64,$base64\" alt =\"profile photo one\"/>";
echo "<p>Image $num $size <br>$jspan jpg: $jLen bytes</span>, <br>$gspan gif: $gLen bytes</span>, <br>$pspan png: $pLen bytes</span></p> $big1";
$fp = fopen($filename ,"w");
fwrite($fp, $raw);
fclose($fp);
imagedestroy($newPic);
$filename = "big1_$type.html";
$fp = fopen($filename ,"w");
fwrite($fp, $big1);
fclose($fp);
$big1 = mysql_escape_string($big1);
@mysql_unbuffered_query("UPDATE `photos` SET `big1`='$big1' WHERE `id`=$id");