Reputation: 459
Basically, Im developing an image cropping system. And I'm trying to resize & convert the images into jpeg and then allow the crop functions to execute. However, it resizes & converts no problem. But when I add the cropping function, the problem is it returns with a cropped black image. The information for this will be posted with jQuery Ajax. And I know the ajax posting works properly because I debugged it. I can provide you with my client side script although I don't beleive that would be necessary since the problem seems to be in the PHP.
Update: I have revised my script. The problem still persists.
$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);
}
Upvotes: 0
Views: 871
Reputation: 1120
You can find imagecreatetruecolor
and add this function
imagecolorallocate
after it.
E.g:
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight); //find this function
imagecolorallocate($newImage, 0, 0, 0); //add this function
imagecolortransparent($newImage, $transpatent);
Upvotes: 0
Reputation: 404
use timthumb instead its a single file and very easy to use, and it has so many options. More information can be found at : http://code.google.com/p/timthumb/
Thanks.
Upvotes: 1