Ini adalah rutinitas yang sangat kuat yang membuat 2 pratinjau gambar dan besar.
Ini juga memeriksa 3 jenis gambar untuk keluaran terkecil. Saya tidak peduli apa format gambarnya karena saya meletakkannya di halaman HTML sebagai base64.
Ini juga mengonversi gambar ke base64 dan menyimpannya dalam tabel SQL dan menyimpan gambar base64 ke halaman HTML.
Saat melakukan penskalaan, gambar ditampilkan untuk ditinjau.
Anda tampaknya memiliki pengetahuan yang cukup tentang ini untuk memahami kode saya.
Saya dapat mengomentarinya.
$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 = '';
Dapatkan jenis gambar berdasarkan Jenis MIME-nya.
Kemudian periksa kembali menggunakan imagecreatefrom
Terlepas dari ekstensi, Jenis MIME, jika itu adalah gambar jpg, png, atau gif, itu akan secara positif mengidentifikasi jenisnya.
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;}
}
}
}
}
Skalakan ke ukuran Pratinjau
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();
Periksa jenis gambar mana yang menghasilkan jumlah byte terkecil
$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">';
}
Konversikan ke bas64 dan Simpan
Saya menggunakan gambar base64 di halaman HTML saya. Ini menghilangkan perjalanan pulang pergi HTTP untuk setiap gambar.
Para penentang mengeluh base64 menambahkan 30% ke ukuran gambar. Dan memang begitu.
Ketika base64 disematkan dalam HTML, itu akan di-zgipped. Dan 30% tambahan dikompresi oleh gzip menjadi jauh lebih sedikit, biasanya hanya beberapa persen.
Perjalanan Pulang Pergi HTTP bervariasi dari server ke server, waktu, dll. tetapi biasanya 200 milidetik. Waktu transmisi base64 biasanya hanya beberapa milidetik.
$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");
Skala ke Gambar Besar:
$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");