я использую PHP, JQuery, AJAX, HTML, и т. д. для моего сайта. Я новичок в PHP.
Я использовал один слайдер изображений jQuery в моем WebApp. Для этого изображения слайдер пользователь загружает изображения. Кроме того, эти загруженные изображения отображаются в этом слайдере изображений. Эта функциональность работает нормально для меня.
Этот слайдер изображения имеет фиксированную ширину и высоту 940 пикселей * 370 пикселей. Я хочу разрешить пользователю загружать изображения, размеры которых должны быть больше или равны 940 пикселей * 370 пикселей.
Предположим, пользователь загружает изображение с размерами 2215 px * 875 px тогда это изображение должно быть изменено в размерах 940 пикселей * 370 пикселей перед его загрузкой на сервер (т.е. перед сохранением изображения на сервер). Только после изменения размера загруженного изображения в 940 пикселей * 370 пикселей он должен быть сохранен на сервере.
Во время этого изменения размера качество изображения не должно пострадать. Изображение измененного размера должно выглядеть как исходное изображение, загруженное пользователем. Он не должен быть сжат или растянут в любом смысле.
Как мне достичь этой функциональности оптимальным способом, используя PHP GD и Image Functions?
Для справки я помещаю ниже код, который я пробовал для загрузки файлов:
HTML-код:
<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
PHP-код:
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
$image_dimesnions = getimagesize($_FILES['file']['tmp_name']);
$image_width = $image_dimesnions[0];
$image_height = $image_dimesnions[1];
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] > 5242880)
&& ($image_width < 940 || $image_height < 370)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";
}
?>
Вы можете сделать это на сервере, используя инструмент командной строки imagemagick или используя PHP GD Library.
Дополнительная информация ссылка на ImageMagick —
Информационная ссылка PHP GD Library —
Используйте команду ниже, чтобы преобразовать изображение —
$w = 940;
$h = 370;
$temp_path = $_FILES["file"]["tmp_name"];
$dest_path = "upload/" . $_FILES["file"]["name"];
shell_exec("/usr/bin/convert -resize \"$w"."X".$h.">\" $dest_path $temp_path");
Используйте приведенный ниже код для PHP GD-
<?php
$uploadPath = "/var/www/stack/26201855/upload/";
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
$imageType = "";
if(strpos($_FILES["file"]["type"],'jpeg') || strpos($_FILES["file"]["type"],'jpg') || strpos($_FILES["file"]["type"],'pjpeg')){
$imageType = "jpeg";
}else if(strpos($_FILES["file"]["type"],'png') || strpos($_FILES["file"]["type"],'x-png')){
$imageType = "png";
}else if(strpos($_FILES["file"]["type"],'gif')){
$imageType = "gif";
}
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists($uploadPath . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
//move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
$images = $_FILES["file"]["tmp_name"];
$new_images = $uploadPath.$_FILES["file"]["name"];
copy($images,$new_images);
$width=940;
$size=GetimageSize($images);
$height=round($width*$size[1]/$size[0]);
if($imageType === 'jpeg'){
$images_orig = imagecreatefromjpeg($images);
}else if($imageType === 'png'){
$images_orig = imagecreatefrompng($images);
}else if($imageType === 'gif'){
$images_orig = imagecreatefromgif($images);
}
$photoX = ImagesX($images_orig);
$photoY = ImagesY($images_orig);
$images_fin = ImageCreateTrueColor($width, $height);
ImageCopyResampled($images_fin, $images_orig, 0, 0, 0, 0, $width+1, $height+1, $photoX, $photoY);
if($imageType === 'jpeg'){
imagejpeg($images_fin,$new_images);
}else if($imageType === 'png'){
imagepng($images_fin,$new_images);
}else if($imageType === 'gif'){
imagegif($images_fin,$new_images);
}ImageDestroy($images_orig);
ImageDestroy($images_fin);
echo "Stored in: " . $uploadPath. $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file";
}
?>
Замечания: Вы сами должны решить, какой удобный способ изменить размер изображения.
Других решений пока нет …