У меня есть сценарий для изменения размера загруженного изображения, но когда я его использую, он просто возвращает черный квадрат. Все сообщения об ошибках указывают на эту функцию:
function resizeImage($image,$width,$height,$scale) { $newImageWidth = ceil($width * $scale); $newImageHeight = ceil($height * $scale); $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight); $source = imagecreatefromjpeg($image); imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height); imagejpeg($newImage,$image,90); chmod($image, 0777); return $image; }
Мои журналы ошибок:
PHP Warning: imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: gd-jpeg: JPEG library reports unrecoverable error PHP Warning: imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: 'img/[hidden].jpg' is not a valid JPEG file PHP Warning: imagecopyresampled(): supplied argument is not a valid Image resource
Согласно ответу Марка B, вы, вероятно, можете проверить, является ли файл файлом JPG. (JPEG, JPG, jpg, jpeg расширения).
это может быть что-то вроде:
$file = explode(".", $_POST['file']); $file_ext = $file[count($file)]; // Get the last thing in the array - in this way the filename can containg dots (.) $allowed_ext = array('jpg', 'JPG', 'jpeg', 'jpg'); if( in_array($file_ext, $allowed_ext ) { // The code for creating the image here. }
imagecreatetruecolor
. Если новое изображение «большое», оно может превышать PHP memory_limit. Эта функция возвращает FALSE, если она по какой-либо причине не работает. imagecreatefromjpeg()
. Два отдельных изображения могут вписываться в пределы памяти, но вместе могут быть слишком большими. Исходное изображение также может не существовать. Эта функция возвращает FALSE, если она по какой-либо причине imagecopyresampled()
ли imagecopyresampled()
– она также возвращает FALSE при сбое. imagejpeg()
– возможно, у вас нет прав на запись для любого файла, который вы указываете в $image
. И снова эта функция возвращает FALSE при сбое.