2013-02-18 108 views
0

基本上,我开发的图像裁剪系统。我试图调整&将图像转换为jpeg,然后允许裁剪功能执行。但是,它调整&转换没有问题。但是,当我添加裁剪功能时,问题是它返回一个裁剪黑色图像。这些信息将与jQuery Ajax一起发布。我知道阿贾克斯发布工作正常,因为我调试它。我可以为您提供我的客户端脚本,尽管我不相信这是必要的,因为问题似乎在PHP中。PHP裁剪不起作用,返回黑色图像 - 图像裁剪系统

更新:我修改了我的脚本。问题依然存在。

$old_file_path = $user_data['profile_pic']; 
$new_width = $_POST['width_img']; 
$new_height = $_POST['height_img']; 
$dst_x = 0; 
$dst_y = 0; 
$src_x = $_POST['left']; 
$src_y = $_POST['top']; 
$dst_w = $_POST['width']; 
$dst_h = $_POST['height']; 
$src_w = $_POST['width']; 
$src_h = $_POST['height']; 

    $file_path = 'core/images/profile/'. substr(md5(time()), 0, 15) . '.' . 'jpg'; 

    $old_file_name = $user_data['profile_pic']; 
    $allowed = array('jpg','jpeg','gif','png'); 
    $file_extension= explode('.', $old_file_name); 
    $file_extn= strtolower(end($file_extension)); 

    $image_p = imagecreatetruecolor($new_width, $new_height); 

    if($file_extn == 'jpg' || $file_extn == 'jpeg'){ 
    $image = imagecreatefromjpeg($old_file_name); 
}if ($file_extn == 'png'){ 
    $image = imagecreatefrompng($old_file_name); 
} 

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

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
imagejpeg($image_p, $file_path); 
//Begin cropping! 
$dst_image = imagecreatetruecolor($dst_w,$dst_h); 
$src_image = imagecreatefromjpeg($old_file_name); 

imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); 
imagejpeg($dst_image, $file_path); 

crop_profile_image($session_user_id, $file_path, $old_file_path); 

function crop_profile_image($user_id, $file_path, $old_file_path){ 
    if(file_exists($old_file_path) === true){unlink($old_file_path);} 
    mysql_query("UPDATE `users` SET `profile_pic` = '". mysql_real_escape_string($file_path) ."' WHERE `user_id` = " . (int)$user_id); 
} 

回答

1

使用timthumb代替它的单个文件并且非常容易使用,它有很多选项。更多信息可以在:http://code.google.com/p/timthumb/

谢谢。

+0

timthumb看到你给 – 2016-05-02 09:13:14

+0

以供将来参考的链接; Timthumb使用起来相当不安全,因此不再是一个好的建议。 – NoobishPro 2018-01-11 01:47:59

0

您可以在此处查找imagecreatetruecolor并将其添加至functionimagecolorallocate之后。 E.g:没有更多的支持

$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight); //find this function 
imagecolorallocate($newImage, 0, 0, 0); //add this function 
imagecolortransparent($newImage, $transpatent);