PHP resim kırpma hatası

1 Cevap php

Ben kullanıcı profili görüntüleri ekinler bir küçük özel drupal modülü var:

$folder = 'sites/default/files/profile_pictures/'.$uid.'/';

$filename = $_POST['filename'];
$orig_w = 480;
$orig_h = $_POST['height'];

$targ_w = 150;
$targ_h = 92;

$ratio = $targ_w / $targ_h;

if(isset($_POST['form_sent']))
{   

    $src = imagecreatefromjpeg($folder.$filename);

    $tmp = imagecreatetruecolor($targ_w, $targ_h);
    imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],$targ_w,$targ_h,$_POST['w'],$_POST['h']);
    imagejpeg($tmp, $folder.'t_'.$filename,100);

    $full_path = $folder.'t_'.$filename;

    imagedestroy($tmp);
    imagedestroy($src);

    // database stuff

} else {
    return 'Nothing to crop!';
}

Bu bir rüya gibi çalışır zaman% 95, ancak bazen o siyah görüntü dönecektir.

Here is an example of the problem: http://5oup.net/sites/default/files/profile_pictures/405/t_Photo_8.jpg

and the original file: http://5oup.net/sites/default/files/profile_pictures/405/Photo_8.jpg

Herhangi bir fikir ne yanlış gidiyor olabilir? Benim tahminim imagecreatetruecolor () çizgi etrafında bir şeydir?

Şimdiden teşekkürler

James

EDIT

Ben şimdi bu durumda o sebep ne gerçekten emin değilim bu yüzden orjinal kullanıcı görüntü ile hata yeniden görünmektedir olamaz! Ben şimdi de hata kaynağı olabilir gerçekleştirmek, yani tam açıklama çıkarları ön kırpma resim yükleme fonksiyonu vardır:

if( isset($_POST['form_sent']) )
{
    $imageFile = $_FILES['image']['tmp_name'];
    $filename = basename( $_FILES['image']['name']);
    $filename = preg_replace("/[^A-Za-z0-9 .]/", '', $filename);
    $filename = str_replace(" ", '_', $filename);

    $filename = urlencode($filename);

    $img_info = getimagesize($imageFile);

    if (filesize($imageFile) > 510000) {
        drupal_set_message('Image too large. Please upload a file 500kb or less.', 'error');
        $image_form = '<a href="/avatar">Choose a different image</a>';
        $output = array(
            'image_form' => $image_form
        );
        return serialize($output);
    }

    list($width, $height) = getimagesize($imageFile);

    switch ($img_info['mime']) {
        case 'image/png':
        $src = imagecreatefrompng($imageFile);
        break;

        case 'image/jpeg':
        case 'image/jpg':
        $src = imagecreatefromjpeg($imageFile);
        break;

        case 'image/gif':
        $src = imagecreatefromgif($imageFile);
        break;

        default:
        drupal_set_message('File type not allowed. Please upload a jpg, gif or png.', 'error');
            $image_form = '<a href="/avatar">Jpg, gif or pngs only</a>';
            $output = array(
                'image_form' => $image_form
            );
            return serialize($output);
        break;
    }

    $orig_h = ($height/$width)* $orig_w;

    $tmp = imagecreatetruecolor($orig_w, $orig_h);
    imagecopyresampled($tmp, $src, 0,0,0,0,$orig_w,$orig_h,$width,$height);
    imagejpeg($tmp, $folder.$filename, 100);

    imagedestroy($tmp);
    imagedestroy($src);     


}

1 Cevap

The file doesn't exist. Your first function renames the files if there are spaces, then passes it to the scaling function.

Ancak, ölçekleme fonksiyonu, sen sonrası adının (yüklenen dosyası) dosya sıfırlanır. (Yeniden adlandırıldı çünkü) Yani, işlevi var olmayan bir dosyayı aramak için gider, ve sonra sadece oluşturduğunuz karartılmış gerçek renk döndü.

Sonrası bir (orijinal işlevi ikinci satır) için dosya sıfırlama kodu kurtulmak ve ince olmalıdır. Ayrıca, ben üzerlerine yapmadan önce bir is_file kontrol yapardı.