Я новичок в программировании, и это мое первое знакомство с PHP. Я создаю мобильное веб-приложение, в котором пользователи могут загружать фотографии на сайт во время мероприятия.
Я использовал PHP-скрипт от W3schools (не ненавидите меня, пожалуйста, но он работает для моих ограниченных знаний).
Поскольку это мобильное приложение, мне нужно добавить дополнительные функции, но я не могу понять, как с множеством сценариев и моим отсутствием знаний.
Перед тем как загрузить изображение в скрипт, я хотел бы сначала сделать следующее.
1) Уменьшите размер до 500 пикселей в ширину и «автоматически» высоту, чтобы сохранить соотношение изображения.
2) Сожмите файл, чтобы он был более подходящим для файлов формата для разрешения на мобильных устройствах (он никогда не будет напечатан) и для ускорения загрузки по сотовой сети.
3) Убедитесь в правильности отображения данных EXIF. Сейчас iOS, Android и Windows отображают портретные и альбомные изображения по-разному, … Мне нужна последовательность
Вот мой код … Я отметил, куда, я думаю, он должен идти, но я не совсем уверен.
Этот код появляется во всплывающем теге div на странице, где отображаются изображения.
<?php
$target_dir = "uploads/";
$target_dir = $target_dir . basename( $_FILES["uploadFile"]["name"]);
$target_dir1 = $target_dir . basename( $_FILES["uploadFile"]["tmp_name"]);
$fileTmpLoc = $_FILES["uploadFile"]["tmp_name"];
$uploadOk=1;
// Check if Upload is done without file.
if (!$fileTmpLoc) { // if file not chosen
echo '<script language="javascript">';
echo 'alert("Please browse for a file before clicking the upload button")';
echo '</script>';
echo '<script language="javascript">';
echo 'window.history.back()';
echo '</script>';
}
// Check if file already exists
if (file_exists($target_dir . $_FILES["uploadFile"]["name"])) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($uploadFile_size > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
//Check no php files
if ($uploadFile_type == "text/php") {
echo "Sorry, no PHP files allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk==0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
//Reduce file to 500px wide
//Compress file
//Rotate file with EXIF data to properly display.
if (move_uploaded_file($_FILES["uploadFile"]["tmp_name"], $target_dir1)) {
echo header( 'Location: gallery.php' ) ;
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Спасибо за любую помощь, и, как уже упоминалось, это мое первое знакомство с PHP.
Существует бесплатная утилита под названием SimpleImage.php, доступная по адресу http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php это будет обрабатывать изменение размера и сжатия и может быть хорошей отправной точкой. На их странице есть отличные примеры того, как его использовать, ниже приведен пример того, как я использую его для изменения размера загруженных изображений до определенной ширины:
require_once("SimpleImage.php");
function createThumbnail($cat_code) {
// Check for full size product image
$fname = $this->getImageFilename($cat_code);
if($fname === "") {
echo "<b>createThumbnail: No image file found for " . $cat_code . "!</b><br>";
return false;
}
$thumb = "images/t/" . $cat_code . ".100.jpg";
if($fname !== "") {
$image = new SimpleImage();
$image->load($fname);
$image->resizeToWidth(100);
$image->save($thumb);
}
return true;
}
function process_upload($file, $cat_code, $format, $price=NULL) {
$imageFileExtensions = array('jpg', 'gif', 'png');
$target_path = "uploads/";
$target_path1 = $target_path . basename($file['name']);
$path_info1 = pathinfo($target_path1);
$ext = $path_info1['extension'];
if(move_uploaded_file($file['tmp_name'], $target_path1)) {
if(rename($target_path1, $main_path1)) {
echo "File ". $file['name'] . " verified and uploaded.<br>";
//Create thumbnail if this is an image file
if(in_array($ext, $imageFileExtensions))
$createThumbnail($cat_code);
} else {
echo "<b>ERROR renaming " . $file['name'] . "</b><br>";
}
}
else
echo "<b>move_uploaded_file(" . $file['tmp_name'] . ", $target_path1) failed</b><br>\n";
}
Чтобы сделать поворот, просто добавьте еще одну функцию в класс SimpleImage, который использует imagerotate()
Например, следующее:
function rotate($angle, $bgd_color, $ignore_transparent=0) {
imagerotate($this->image, $angle, $bgd_color, $ignore_transparent);
}
Страница php.net для imagerotate имеет более подробную информацию о параметрах функции.
Для работы с данными EXIF я использую другую бесплатную утилиту под названием PelJpeg.php, доступную по адресу http://lsolesen.github.io/pel/. Есть много примеров того, как использовать это, если вы Google PelJpeg.php. Это может быть довольно сложно, потому что, как вы упомянули, каждая платформа обрабатывает изображения и метаданные немного по-разному, поэтому вам придется много тестировать, чтобы увидеть, какие вещи обрабатываются одинаково на разных платформах, какие разные, и как преодолеть эти пробелы.
Других решений пока нет …