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');


Тогда я получаю ту же ошибку. : (



Могу ли я получить здесь некоторую помощь, пожалуйста ?

638   4  

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);

Вы должны определить Заголовок:

header('Content-type: image/jpeg');

1) $tmp_img это ресурс, а не файл. Вероятно, вам нужно сохранить изображение на диск и использовать его для putObjectFile

2) Вероятно, вам нужно сообщить 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

    Ничего не найдено.