Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP图像上传脚本(需要添加缩小大小、压缩和旋转EXIF数据)_Php_Android_Html_Ios_Exif - Fatal编程技术网

PHP图像上传脚本(需要添加缩小大小、压缩和旋转EXIF数据)

PHP图像上传脚本(需要添加缩小大小、压缩和旋转EXIF数据),php,android,html,ios,exif,Php,Android,Html,Ios,Exif,我是编程新手,这是我第一次接触PHP。我正在开发一个移动网络应用程序,用户可以在社交活动中向网站上传图片。 我使用了W3schools的PHP脚本(请不要恨我,但它对我有限的知识有用)。 因为它是一个移动应用程序,我需要添加额外的功能,但由于大量的脚本和知识的缺乏,我无法理解如何添加。 在将图像上传到脚本中之前,我想首先执行以下操作 1) 将尺寸减小到500px宽,并“自动”调整高度以保持图片比例 2) 压缩文件,使其文件大小更适合移动设备上的分辨率(它永远不会被打印),并加快通过手机网络上传的

我是编程新手,这是我第一次接触PHP。我正在开发一个移动网络应用程序,用户可以在社交活动中向网站上传图片。 我使用了W3schools的PHP脚本(请不要恨我,但它对我有限的知识有用)。 因为它是一个移动应用程序,我需要添加额外的功能,但由于大量的脚本和知识的缺乏,我无法理解如何添加。 在将图像上传到脚本中之前,我想首先执行以下操作

1) 将尺寸减小到500px宽,并“自动”调整高度以保持图片比例

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.";
    }
}
?>

有一个名为SimpleImage.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";
}
的php.net页面提供了有关函数参数的更多详细信息


为了处理EXIF数据,我使用了另一个名为PelJpeg.php的免费实用程序,可从以下站点获得。如果您使用google PelJpeg.php,有许多关于如何使用此功能的示例。它可能会变得有点复杂,因为正如您所提到的,每个平台处理图像和元数据的方式都有点不同,所以您必须进行大量测试,以了解在不同平台上处理相同的内容,不同的内容,以及如何跨越这些差距。

谢谢@David G,我将介绍这些内容,虽然这可能超出了我对PHP的“语法”和编程知识。您的SimpleImage.PHP建议解决了大小和压缩问题,…谢谢。但我正在努力应用旋转分辨率,…只是无法让它工作。我的编程知识非常初级,无法理解。@DarrenE我在上面添加了一个关于如何添加旋转函数的示例,应该非常简单。谢谢@David G,我尝试了,但没有成功,……但我知道原因。我查看了从iPhone上传的图片中的EXIF数据,数据非常有限。它只是上传“JPEG Makernote”部分,而不是“EXIF Makernote”详细信息。这些脚本都不起作用,因为“方向”详细信息不在上载文件中。回到绘图板。我想知道EXIF数据何时被剥离。在上传之前,是否可以在文件选择模式下读取EXIF数据?我会测试。。。
function rotate($angle, $bgd_color, $ignore_transparent=0) {
    imagerotate($this->image, $angle, $bgd_color, $ignore_transparent);
}