GD ile resim kırpma sonra db yüklemek ancak boyutlandırma değil

3 Cevap php

Benim kod temelde 127px tarafından 219px için görüntü kırpma ve veritabanına görüntü kaydetmek ama hatalar alıyorum ve onu anlamaya olamaz gerekir.

<?php
if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) {


$tmpname = $_FILES['imglogo']['tmp_name'];
$imgsize = $security->secure($_FILES['imglogo']['size']);
$imgtype = $security->secure($_FILES['imglogo']['type']);
$school = $security->secure($_POST['school']);

//crop image
$canvas = imagecreatetruecolor(219,127);
$imgattrib = getimagesize($tmpname);
$source = imagecreatefromjpeg($tmpname);
imagecopyresized($canvas,$source,0,0,0,0,219,127,$imgattrib[0],$imgattrib[1]);

$handle = fopen($tmpname, "r");
$content = fread($handle, filesize($tmpname));
$content = addslashes($content);
fclose($handle);




$save = mysql_query("insert into tbl_school_preview  values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error());
//header("Location: school-catalog.php?page=school_preview");
}
?>

Ben herhangi bir hata görmüyorum ama kırpma olmuyor. Ben yanlış bir şey var mı?

[Updated code] Here is the new piece of block for some reason the thumb won't save.

if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) {

//$filename = $security->secure($_FILES['imgschool']['name']);
$tmpname = $_FILES['imglogo']['tmp_name'];
$imgsize = $security->secure($_FILES['imglogo']['size']);
$imgtype = $security->secure($_FILES['imglogo']['type']);
$school = $security->secure($_POST['school']);

//crop image
$canvas = imagecreatetruecolor(219,127);
$imgattrib = getimagesize($tmpname);
$source = imagecreatefromjpeg($tmpname);
imagecopyresized($canvas,$source,0,0,0,0,219,127,$imgattrib[0],$imgattrib[1]);



$newfile = imagejpeg($canvas,'thumb.jpg',100);

$handle = fopen($newtmpfile, "r");
$content = fread($newtmpfile, filesize($newtmpfile));
$content = addslashes($content);
fclose($handle);




$save = mysql_query("insert into tbl_school_preview values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error());

3 Cevap

Eğer görüntü kaydetmek için herhangi bir fopen / fwrite şeyler yapmak gerekmez. Gibi bir şey ile tüm değiştirin:

$filename = '/path/to/desired/save/location.png'
imagepng($canvas, $filename);

Ve gitmek için iyi olmalıdır. Bunu ikinci parametre verdiğimde imagepng fonksiyonunu dosyayı yazacağız. Aynı imageGif ve imagejpeg için doğru olacaktır.

Sen $ tuval değil, orijinal görüntünün içeriğini içeriğini kaydetmek gerekir.

Sonra kesmek zorunda kalacak imagepng, ya da doğrudan çıkış akımı ile geçici dosyaya çıktı onu.

ob_start ();

imagepng ($ canvas);

= Ob_get_contents $ out ();

ob_end_clean ();

Just two tips:

.. Bu dosyanın içeriğini almak için ob_start() kullanabilirsiniz Ben her şeyden önce dosya sistemine dosyayı kaydetmek için olmaz.

ob_start();
imagepng($canvas);
$imageString = ob_get_contents();
ob_end_clean();

$save = mysql_query("
    insert into tbl_school_preview    
    values(null,'$school',$imagestring,'$imgtype','$imgsize')
    ")or die(mysql_error());

Ayrıca imagecopyresampled() minik iyi kalite için kullanın. Veritabanına eklerken görüntü kod garip karakterler sakının.