imagejpeg () не дает вывода должным образом в php
Я хочу загрузить изображение с диска, изменить его размер, а затем загрузить его в Amazon S3.
Однако я не могу получить правильный вывод изображения из imagejpeg ().
Вот мой код:
$sourceUrl = $_FILES['path']['tmp_name'];
$thumbWidth = '100';
$thumbid = uniqid();
$img = imagecreatefromjpeg($sourceUrl);
$width = imagesx( $img );
$height = imagesy( $img );
// calculate thumbnail size
$new_width = $thumbWidth;
$new_height = floor( $height * ( $thumbWidth / $width ) );
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// output the image
imagejpeg($tmp_img);
// upload thumbnail to s3
$s3->putObjectFile($tmp_img, "mybucket", $thumbid, S3::ACL_PUBLIC_READ);
Firebug выдает мне такую ошибку:
illegal character
[Break on this error] (�����JFIF���������>CREATOR: g...(using IJG JPEG v62), default qualityn
Если я изменю imagejpeg таким образом,
imagejpeg($tmp_img, 'abc.jpg');
Тогда я получаю ту же ошибку. : (
Могу ли я получить здесь некоторую помощь, пожалуйста ?
4 ответов:
Если вы проверяете документацию
imagejpeg, Вы можете увидеть, что выводит изображение, это означает, что способ, которым вы его называете, он получает отправку в браузер. Вы можете получить его для сохранения в файл вторым способом-путем передачи имени файла во втором параметре.Также
$tmp_imgявляется ресурсом изображения, а не готовым к использованию файлом изображения.Я не знаю, как работает ваша функция загрузки, но: если вам нужно загрузить содержимое файла , Сделайте это следующим образом:
ob_start(); imagejpeg($tmp_image); $image_contents = ob_get_clean(); $s3->putObjectFile($image_contents, "mybucket", $thumbid, S3::ACL_PUBLIC_READ);Если вам нужен имя файла для загрузки:
$filename = tempnam(sys_get_temp_dir(), "foo"); imagejpeg($tmp_image, $filename); $s3->putObjectFile($filename, "mybucket", $thumbid, S3::ACL_PUBLIC_READ);
1)
$tmp_imgэто ресурс, а не файл. Вероятно, вам нужно сохранить изображение на диск и использовать его дляputObjectFile2) Вероятно, вам нужно сообщить S3, что загружаемый файл имеет тип image / jpeg
Ну, ребята, еще раз большое спасибо, я еще немного повозился и объединив это с вашими ответами, я получил эту работу следующим образом:)
$thumbid .= ".jpg"; $img = imagecreatefromgif($sourceUrl); $width = imagesx( $img ); $height = imagesy( $img ); // calculate thumbnail size $new_width = $thumbWidth; $new_height = floor( $height * ( $thumbWidth / $width ) ); // create a new temporary image $tmp_img = imagecreatetruecolor( $new_width, $new_height ); // copy and resize old image into new image imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); $path = '/var/www/1.4/wwwroot/cdn/'.$thumbid; // output the image if(imagegif($tmp_img, $path)){ $thumblink = ""; // upload thumbnail to s3 if($s3->putObjectFile($path, "mybucket", $thumbid, S3::ACL_PUBLIC_READ)){ $thumblink = "http://dtzhqabcdscm.cloudfront.net/".$thumbid; imagedestroy($tmp_img); } return $thumblink; }
Comments