嗯,这是新的。无法从智能手机上传照片?

2023-11-30

因此,我正在创建一个响应式网站,可以选择将图像上传到页面。 php 脚本基本上调整图像大小并将缩略图文件路径存储在数据库中。原始图像和缩略图也存储在网站文件夹中。我正在使用 GD 库。

不管怎样,我只是在测试从我的 iPhone 上传照片到网站。它确实上传图像。然而,它有两个问题。

  1. 上传照片需要很长时间。
  2. 照片上传完成后是横向的。如果照片是肖像照片,则会以风景形式上传。诡异的。

谁能帮我解决这两个问题吗?

更新代码

if (isset($_FILES['image'])) {

    if (empty($_FILES['image']['name'])) {

            ?><div class="add-errors">Please choose an image!</div><?php 

    }   else {


        function getOrientedImage($imagePath){
            $image = imagecreatefromstring(file_get_contents($imagePath));
            $exif = exif_read_data($imagePath);
            if(!empty($exif['Orientation'])) {
                switch($exif['Orientation']) {
                    case 8:
                        $image = imagerotate($image,90,0);
                        break;
                    case 3:
                        $image = imagerotate($image,180,0);
                        break;
                    case 6:
                        $image = imagerotate($image,-90,0);
                        break;
                }
            }
            return $image;
        }

        $name       =   $_FILES['image']['name'];
        $temp       =   $_FILES['image']['tmp_name'];
        $type       =   $_FILES['image']['type'];
        $size       =   $_FILES['image']['size'];
        $ext        =   strtolower(end(explode('.', $name)));
        $size2      =   getimagesize($temp);
        $width      =   $size2[0];
        $height     =   $size2[1];
        $upload     =   md5( rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ));

        // Restrictions for uploading
        $maxwidth   =   6000;
        $maxheight  =   6000;
        $allowed    =   array('image/jpeg', 'image/jpg', 'image/png', 'image/gif');

        // Recognizing the extension
        switch($type){

            // Image/Jpeg
            case 'image/jpeg':
                    $ext= '.jpeg';
            break;

            // Image/Jpg
            case 'image/jpg':
                    $ext= '.jpg';
            break;

            // Image/png
            case 'image/png':
                    $ext= '.png';
            break;

            // Image/gif
            case 'image/gif':
                    $ext= '.gif';
            break;
        }

        // upload variables
        $path           =   $userDir . $upload . $ext;
        $thumb_path     =   $userDir . 'thumb_' . $upload . $ext;

        // check if extension is allowed.
        if (in_array($type, $allowed)) {

            // Checking if the resolution is FULLHD or under this resolution.
            if ($width <= $maxwidth && $height <= $maxheight) {
                if ($size <= 5242880) {

                    // check the shape of the image
                    if ($width == $height) {$shape = 1;}
                    if ($width > $height) {$shape = 2;}
                    if ($width < $height) {$shape = 2;}

                    //Adjusting the resize script on shape.
                    switch($shape) {

                        // Code to resize a square image.
                        case 1:
                            $newwidth =     690;
                            $newheight =    690;
                        break;

                        // Code to resize a tall image
                        case 2:
                            $newwidth   =   690;
                            $ratio      =   $newwidth / $width;
                            $newheight  =   round($height * $ratio);

                        break;

                    }

                    // Resizing according to extension.
                    switch ($type) {

                        // Image/Jpeg   
                        case 'image/jpeg';
                            $img =      getOrientedImage($temp);
                            $thumb =    imagecreatetruecolor($newwidth, $newheight);
                                        imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                                        imagejpeg($thumb, $thumb_path);
                        break;

                        // Image/Jpg    
                        case 'image/jpg';
                            $img =      getOrientedImage($temp);
                            $thumb =    imagecreatetruecolor($newwidth, $newheight);
                                        imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                                        imagejpeg($thumb, $thumb_path);
                        break;

                        // Image/png    
                        case 'image/png';
                            $img =      getOrientedImage($temp);
                            $thumb =    imagecreatetruecolor($newwidth, $newheight);
                                        imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                                        imagepng($thumb, $thumb_path);
                        break;

                        // Image/gif    
                        case 'image/gif';
                            $img =      getOrientedImage($temp);
                            $thumb =    imagecreatetruecolor($newwidth, $newheight);
                                        imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
                                        imagegif($thumb, $thumb_path);
                        break;
                    }


                        // Move the original file aswell.
                        move_uploaded_file($temp, $path);


                } else {
                    ?><div class="add-errors">Your image size is too big!</div><?php
                }
            } else {
                ?><div class="add-errors">Your image resolution exceeds the limit!</div><?php
            }

        } else {
            ?><div class="add-errors">Your have uploaded a forbidden extension!</div><?php

        }

    }

}

您可能想查看exif_read_data()函数,然后查看['Orientation']数组中返回的值。通常,具有方向传感器的手机或相机会以一个方向或另一个方向存储图像,然后向图片中的 exif 数据添加适当的方向标记。然后由图像查看器或图像处理器决定是否在显示或处理图像之前旋转原始图片。

该页面的评论中有一些很好的例子。

根据该页面上的示例之一构建的函数:

<?php
    function getOrientedImage($imagePath){
        $image = imagecreatefromstring(file_get_contents($imagePath));
        $exif = exif_read_data($imagePath);
        if(!empty($exif['Orientation'])) {
            switch($exif['Orientation']) {
                case 8:
                    $image = imagerotate($image,90,0);
                    break;
                case 3:
                    $image = imagerotate($image,180,0);
                    break;
                case 6:
                    $image = imagerotate($image,-90,0);
                    break;
            }
        }
        return $image;
    }
?>

此外,关于上传时间,如果设备使用手机信号塔传输数据,您的上传速度可能只是下载速度的一小部分。为了进行比较,大多数社交网络应用程序会在上传之前调整图像大小,而您的网页可能不会。由于手机可拍摄 8 兆像素或更高的照片,这会产生大量数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嗯,这是新的。无法从智能手机上传照片? 的相关文章

  • PHP 有效读取 csv 文件

    有几种使用 PHP 读取 CSV 文件的方法 我以前用过explode函数将每一行放入一个数组中 然后explode逗号并使用trim删除数据周围的任何引号 本来就很乱 PHP 5 现在有fgetcsv和 str getcsv 我猜这是这些
  • 返回变量在 PHP 中不起作用(即没有返回值!)

    我更喜欢使用 Python 语言进行编程 但必须使用 PHP 来处理特定的网站应用程序项目 在 PHP 中 我试图将函数中的值 返回 到主程序环境 用于后续计算 但无论我尝试什么 函数中计算的值都不会返回该值 而是从函数中回显 工作正常 在
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • php 在内容前插入十六进制字符数

    我正在将网站移动到新服务器 旧服务器有 php 5 3 2 新服务器有 php 5 5 9 Centos httpd Apache 2 2 26 我已经复制了文件 它工作正常 除了唯一奇怪的事情 一些奇怪的十六进制数字被插入到页面内容之前
  • PSR-4 代码库中条令生成器的解决方法

    在 Windows 机器上使用 Symfony 2 和 Doctrine 我正在尝试 从现有模式生成实体 php app console doctrine mapping import force CoreBundle annotation
  • 如何从字符串中只获取数字? [复制]

    这个问题在这里已经有答案了 我有这样的字符串 第 001 课 完成 在这种情况下 我只想获取数字部分001 我试过这个 str the title preg match all d str matches number implode ma
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • Propel Query 中的动态表名称

    我想知道您是否可以使 propel 查询的表名称动态化 有点像变量 一个例子类似于 DynamicVar Query create 我让它在 ifs 中工作 就像下面的例子一样 但如果更动态地制作 可以删除相当多的行 这些表的设置都是相同的
  • WAMP 不显示目录列表中的图标

    过去 我通过 vmware 处理 PHP 代码 但最近我决定转而通过 WAMP 在 Windows 8 1 上 在本地进行处理 我创建了一个空文件夹tests in the www folder 然后在我的浏览器上输入http localh
  • 使用 DOM 获取 div 的内容(包括子标签)

    我正在使用 DOM 来获取 div 标签的内容 但内部 html 部分未显示 功能是 dom new DOMDocument libxml use internal errors true dom gt loadHTMLFile url l
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • 无需下载整个文件即可读取 ID3 标签

    是否可以读取 MP3 文件的 ID3 标签 持续时间 艺术家 标题 而无需下载整个文件 我做了一些测试 只需下载 MP3 文件的几个字节就可以获得艺术家和标题标签 但我不确定持续时间和其他标签是否可能 Thanks 我刚刚发现 ffmpeg
  • php,in_array,0值

    我试图理解in array下一个场景的行为 arr array 2 gt Bye 52 77 3 gt Hey var dump in array 0 arr 返回值in array 是布尔值true 正如你所看到的no值等于0 所以有人可
  • 使 div 的大小与其内部图像的大小相同

    我有一个带有以下代码的div HTML div img src img logo png div CSS div imgContainer width 250px height 250px padding 13px 问题是用户可以编辑图像大
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar
  • Laravel 5 注销特定用户

    在我的 laravel 5 应用程序中 有一个功能允许具有管理员角色的用户重置非管理员的任何人的密码 但这不会强制该人注销并再次登录 更改密码后如何强制用户注销 我没有对用于验证用户身份或任何内容的中间件进行任何更改 我不知道它是否有效 但

随机推荐

  • 如何生成 firebase 注册令牌

    我正在尝试使用新方法生成 firebase 注册令牌 但无法生成以下代码 MyFirebaseInstanceIdService java public class MyFirebaseInstanceIdService extends F
  • UIView 边界和框架的属性观察者的反应不同

    当我正在探索观察的选项时UIView s bounds or frame改变 提到here and here 我遇到了一个非常奇怪的差异 didSet and willSet将根据您放置的位置不同地触发UIView在视图层次结构中 如果我使
  • Gmail 不会在电子邮件中呈现 html

    我将用一个非常基本的示例再尝试一次 当我使用 PHP 向电子邮件客户端发送电子邮件时 除了 gmail 之外 没有任何问题 当我在 gmail 中查看电子邮件时 我看到的只是邮件的代码 Gmail 不显示 HTML 它只是显示代码 这是我的
  • 如何在 Accord.net 中保存“学习状态”?

    我是机器学习和 Accord net 的初学者 我了解了如何训练它然后使用它 但在企业环境中 在服务器上运行它 我如何坚持 Accord net 的学习成果 我是否需要保存所有训练数据并在每次重新启动应用程序时重新训练 通过添加在代码中导入
  • Linux crontab 每月第 n 个星期六

    除周六外 我喜欢在所有工作日恢复跑步 我的 crontab 条目 30 16 1 2 3 4 5 backup sh 这个条目工作正常 另外 我喜欢在第一 第三个星期六恢复 如果一个月内有第五个星期六可用 则应运行备份 crontab 的条
  • 从 Scanner 获取输入时 Maven 挂起

    我正在设计一个程序 该程序必须使用 mvn test 命令运行并从命令行获取用户输入 当我使用 mvn test 运行程序时 一切正常 直到Scanner next 执行后 CLI 挂起 我必须关闭该程序 my test method pu
  • PHP if not equal(!=) and or (||) 问题。为什么这不起作用?

    我知道这是简单的 PHP 逻辑 但它就是行不通 str dan if str joe str danielle str heather str laurie str dan echo a href Get to know get the a
  • YouTube 数据 API v3 调用返回的最大结果是多少

    Context 我正在提供一些有关使用 YouTube Data API V3 进行 HTTP GET 的咨询 为了开发一个基于 Windows 的应用程序来从 Youtube 获取结果列表 例如特定类别或特定标签 我们愿意使用任何编程语言
  • 使用 Zend/PHP 删除 YouTube 视频

    我正在使用 Zend 和 PHP 从我的主页上传和删除视频 上传部分工作正常 但下载部分比较复杂 videoEntryToDelete yt gt getVideoEntry videoId yt gt delete videoEntryT
  • 如何将 HTML 小部件与外部 CSS 隔离

    我使用 AngularJS 开发了一个即时消息组件 可以向任何网页添加即时消息功能 该组件相当复杂 其样式表长达约 800 行 当该组件部署到第三方网站时 我遇到了问题 有时 主机网站的 CSS 会影响聊天小部件的样式 当组件被添加到新的
  • 在尝试使用 Timer.scheduledTimer 的 SwiftUI 代码中获取未解析的标识符“self”

    在 SwiftUI 中 我注意到使用一个计时器 尝试 1 这不起作用 因为获取 使用未解析的标识符 自我 var timer2 Timer Timer scheduledTimer withTimeInterval 1 repeats tr
  • 我可以将 __func__ 替换为 C 宏中的标识符名称吗?

    我想编写一个 C 宏 它采用以下内容 int foo MY MACRO 并将其扩展为 int foo macro var foo 我发现我无法使用 func 因为它实际上并没有在宏中得到扩展 预处理器将其视为变量 有什么方法可以让它发挥作用
  • 创建 INDEX 的独特论据 - 用途是什么?

    为什么 INDEX 创建语句有 UNIQUE 参数 据我了解 非聚集索引包含一个书签 一个指向行的指针 它应该是唯一的 以区分甚至非唯一的行 那么确保非聚集索引是唯一的 正确的 那么 我是否理解非唯一索引只能在聚集表上 自从 视图上的聚集索
  • Android 共享首选项值的最大大小是多少?

    我完全理解将大量数据转储到首选项中是完全不合适的 但我的要求不是那么好 但足够大 可能 500 5000 字节 我不知道它是否合适 这些文档没有帮助 http developer android com reference android
  • 使用字符串常量通知属性已更改

    我正在使用一些现有代码 并试图找出在实现 INotifyPropertyChanged 接口时使用字符串常量作为属性名称的优点 如果有的话 例如这样做 Why use this instead of string literal in On
  • Android Studio:另一个 AAR 库中的 AAR 库依赖项

    我使用的是Android Studio 1 5 我有一个图书馆项目 核心语音服务 aar 此 AAR 文件已正确生成 所有类均在 AAR 文件的classes jar 内构建并打包 现在我正在创建另一个 AAR 库谷歌语音服务 aar这取决
  • 解析属性键中包含特殊字符的 JSON 对象

    我有一个看起来像这样的 JSON 文件 samlp Response attributes xmlns samlp urn oasis names tc SAML 2 0 protocol ID 482d7b9c 3e50 47cb aa6
  • 正则表达式回顾格式条件

    我需要帮助来制作可以匹配特定格式的正则表达式 Input FR 2 699 FR 599 3 FR 899 4 FR 3 899 5 FR 1 499 6 fr 999 Output 599899999 我努力了 1 9 d 2 但输出是
  • 在 corrplot() 中报告显着性水平

    我目前正在使用corrplot 来自corrplotR 中的包 我偶然发现了两个问题 为简单起见 我将使用与 corrplot 的帮助 介绍页面相同的符号 我想在所有单元格中记下我的 p 值或测试的显着性 或两者 而不仅仅是不显着的单元格
  • 嗯,这是新的。无法从智能手机上传照片?

    因此 我正在创建一个响应式网站 可以选择将图像上传到页面 php 脚本基本上调整图像大小并将缩略图文件路径存储在数据库中 原始图像和缩略图也存储在网站文件夹中 我正在使用 GD 库 不管怎样 我只是在测试从我的 iPhone 上传照片到网站