URI данных, сохраненные изображения JPG, создают черные изображения при загрузке с помощью php imagecreatefromjpeg

Я использую следующий код для загрузки

//width,new_width,height,new_height are set
$tmp_filename = $_FILES['file']['tmp_name'];
$image_p = imagecreatetruecolor($new_width, $new_height); //resample image          

if(($ext=='jpg') | ($ext=='jpeg')){
    //if image to be uploaded is jpg
    $image = imagecreatefromjpeg($tmp_filename); 
}
else{
    //if image to be uploaded is png
    $image = imagecreatefrompng($tmp_filename);
}

//to convert to jpg
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

$done=imagejpeg($image_p, $output_dirrectory."/".$image_name.".jpg",95); //95% quality

Теперь проблема в том, что когда я сохраняю изображение с любого другого веб-сайта, созданное с использованием URI данных, оно сохраняется на моем локальном компьютере как изображение JPG. Когда я пытаюсь загрузить то же изображение со следующим кодом, он создает черное изображение.

Я не мог понять проблему. Я надеюсь, что решение кроется в imagecreatefromstring, но я не знаю, как это будет работать со следующим кодом? Пожалуйста, предложите любое решение?


person Uday Hiwarale    schedule 23.09.2014    source источник
comment
Я думаю, вам нужно опубликовать больше кода. Как именно подаются данные на случай, если он не работает? Если данные изображения находятся в сообщении формы, вы можете быть правы насчет imagecreatefromstring. Но если вы загружаете его в виде файла, возможно, вы пытаетесь загрузить ярлык к изображению, которое не будет работать.   -  person Garr Godfrey    schedule 23.09.2014
comment
Кажется, вы не устанавливаете $width или $height. Если они равны нулю, он просто ничего не увеличит до полного пустого квадрата.   -  person Garr Godfrey    schedule 23.09.2014
comment
упомянутые в верхних комментариях, они установлены... этот код работает с другими файлами jpg и png. Только не с некоторыми файлами jpg.   -  person Uday Hiwarale    schedule 23.09.2014
comment
хорошо, но как вы можете установить их еще до того, как загрузите изображение? Вы не знаете ширину и высоту загружаемого изображения.   -  person Garr Godfrey    schedule 23.09.2014
comment
мне нравится использовать exif_imagetype для определения типа изображения (это должно быть включено в php.ini). Затем вам нужно обработать возможные ошибки, и вы поймете, где что-то идет не так.   -  person Garr Godfrey    schedule 23.09.2014
comment
Я нашел проблему. Файл, сохраненный на моем компьютере, на самом деле имеет формат png, но с расширением .jpg. Я проверяю тип файла с веб-сайта, и он возвращает PNG. Теперь, когда я проверяю расширение файла в фоновом режиме, используя этот код $ext = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION); , он возвращает jpg.   -  person Uday Hiwarale    schedule 24.09.2014
comment
тогда сработало бы использование exif_imagetype.   -  person Garr Godfrey    schedule 24.09.2014
comment
Да, это так. Спасибо :)   -  person Uday Hiwarale    schedule 24.09.2014


Ответы (1)


попробуйте добавить:

$width = imageSX($image);
$height = imageSY($image);

перед вызовом imagecopyresampled

person Garr Godfrey    schedule 23.09.2014