php在上传时调整图像大小

2023-12-01

我得到了一个表单,用户可以在其中插入一些数据并上传图像。

为了处理图像,我得到了以下代码:

define("MAX_SIZE", "10000");
$errors = 0;
$image = $_FILES["fileField"]["name"];
$uploadedfile = $_FILES['fileField']['tmp_name'];
if($image){
    $filename = stripslashes($_FILES['fileField']['name']);
    $extension = strtolower(getExtension($filename));
    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")){
        echo ' Unknown Image extension ';
        $errors = 1;
    } else {
        $newname = "$product_cn.$extension";
        $size = filesize($_FILES['fileField']['tmp_name']);
        if ($size > MAX_SIZE*1024){
            echo "You have exceeded the size limit";
            $errors = 1;
        }
        if($extension == "jpg" || $extension == "jpeg" ){
            $uploadedfile = $_FILES['file']['tmp_name'];
            $src = imagecreatefromjpeg($uploadedfile);
        } else if($extension == "png"){
            $uploadedfile = $_FILES['file']['tmp_name'];
            $src = imagecreatefrompng($uploadedfile);
        } else {
            $src = imagecreatefromgif($uploadedfile);
        }
        list($width, $height) = getimagesize($uploadedfile);
        $newwidth = 60;
        $newheight = ($height/$width)*$newwidth;
        $tmp = imagecreatetruecolor($newwidth, $newheight);
        $newwidth1 = 25;
        $newheight1 = ($height/$width)*$newwidth1;
        $tmp1 = imagecreatetruecolor($newwidth1, $newheight1);
        imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);
        $filename = "../products_images/$newname";
        $filename1 = "../products_images/thumbs/$newname";
        imagejpeg($tmp, $filename, 100); // file name also indicates the folder where to save it to
        imagejpeg($tmp1, $filename1, 100);
        imagedestroy($src);
        imagedestroy($tmp);
        imagedestroy($tmp1);
    }
}

获取扩展函数:

function getExtension($str) {
    $i = strrpos($str, ".");
    if (!$i) { return ""; }
    $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext;
}

因为我不太熟悉这些函数,所以我在代码中写了一些符号。

由于某种原因,它不起作用。当我转到文件夹“product_images”或“product_images/thumbs”时,我找不到任何上传的图像。

知道我的代码有什么问题吗?应该有 60px 宽度的图像和 25px 宽度的图像。

注意:您不知道在何处声明的变量,例如$product_cn在该代码块之前声明,该代码块工作得很好(经过测试)。如果您仍然想看一眼,请随时索要代码。


这是另一个很好且简单的解决方案:

$maxDim = 800;
$file_name = $_FILES['myFile']['tmp_name'];
list($width, $height, $type, $attr) = getimagesize( $file_name );
if ( $width > $maxDim || $height > $maxDim ) {
    $target_filename = $file_name;
    $ratio = $width/$height;
    if( $ratio > 1) {
        $new_width = $maxDim;
        $new_height = $maxDim/$ratio;
    } else {
        $new_width = $maxDim*$ratio;
        $new_height = $maxDim;
    }
    $src = imagecreatefromstring( file_get_contents( $file_name ) );
    $dst = imagecreatetruecolor( $new_width, $new_height );
    imagecopyresampled( $dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
    imagedestroy( $src );
    imagepng( $dst, $target_filename ); // adjust format as needed
    imagedestroy( $dst );
}

参考:PHP 根据最大​​宽度或重量按比例调整图像大小

编辑:稍微清理并简化了代码。感谢@jan-mirus 的评论。

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

php在上传时调整图像大小 的相关文章

随机推荐

  • 使用 Gson 反序列化泛型集合

    我在使用 GSon 进行 json 反序列化时遇到一些困难 我希望有人可以帮助我 我想反序列化以下 json 片段 fieldA valueA myCollection AnotherClass objectAfieldA valueB o
  • 从 TCL 中的过程返回数组

    我想从过程中传递数组并返回数组 以下是我尝试的示例代码 但出现一些错误 set a 0 11 set a 1 10 set a 2 20 set a 3 30 set a 4 40 proc deleten somet upvar some
  • 如何使用批处理搜索和替换区分大小写的字符串

    我想搜索并替换区分大小写的字符串 就像如果我在文本文件中有rise Rise RISE 我只想替换字符串 rise 下面的代码是替换所有三个字符串 请帮助我 Echo on SETLOCAL ENABLEEXTENSIONS SETLOCA
  • Android:如何追踪 InflateException 的来源?

    启动我的应用程序时 我在 Logcat 中收到以下警告 04 09 10 28 17 830 WARN WindowManager 52 Exception when adding starting window 04 09 10 28 1
  • IP地址正则表达式Python

    我遇到正则表达式问题 我需要最有效的正则表达式 匹配 IP 地址且仅在 255 范围内 我试过这个 ip pattern d 1 3 d 1 3 d 1 3 d 1 3 但它确实匹配超过 255 的偶数 例如 321 222 11 4 这应
  • tsc 未被识别为内部或外部命令

    我在 Windows7 上使用节点版本 6 9 2 和 npm 版本 5 4 2 我已经使用命令安装了打字稿npm install typescript g 但是 当我使用命令运行演示文件时 tsc 我收到错误 tsc is not rec
  • 绕过浏览文件/上传文件对话框

    我正在构建一个供内部使用的 Chrome 扩展程序 第一步 用户可以上传文件 这是always同一个文件 我想跳过浏览对话框并直接为输入字段分配正确的值 该文件与插件代码分开 这可以通过 Javascript 实现 或者开发 Chrome
  • HTML5 缓存清单:将所有远程资源列入白名单?

    我正在制作一个包含博客的 iPhone 版桌面网站 该博客经常嵌入来自其他域的图像 显然 在这种情况下 图像 URL 始终以 http 开头 但由于我使用的是缓存清单 因此不会加载这些图像 因为它们未在清单文件 我有一个网络 白名单部分 其
  • 批处理文件:在for循环中转义问号

    这个 for 循环 简化的最小示例 echo off for a in help help help help do echo a 用 扼住 2 个元素特点 它输出 C Temp gt test bat help help help hel
  • 如何使 UICollectionView 单元格水平居中?

    我做了一些研究 但我找不到任何关于如何将 UICollectionView 中的单元格水平居中的代码示例 而不是第一个单元格是这样的X00 我希望它是这样的0X0 有什么办法可以做到这一点吗 EDIT 可视化我想要的东西 当 Collect
  • 如何将我的 Swift 代码转换回 2.3

    我下载了 XCode Beta 8 并将所有 swift 代码从 Swift 2 3 转换为 Swift 3 它给我带来了太多问题 并导致我开始了一个我已经工作了大约 4 个月的项目 如何将我的代码从 Swift 3 转换回 Swift 2
  • 方括号在 C 中如何工作?

    我刚刚开始学习 C 我正在尝试了解基础知识 很多教程会告诉你一些事情 让你相信它 而无需任何真正的解释 而且我找不到人类可读的答案 在下面的 include
  • C# 中按特定精度向下舍入

    我怎样才能舍入double由特定的precision 我需要一个函数来获取double并返回最接近该 double 的值 该值是该特定的倍数precision并且低于两倍 例如 如果精度 2 5 9 3 gt 7 5 12 5 gt 12
  • 使用 NameValueCollection 的 WCF 序列化问题

    我正在尝试通过 WCF 序列化 NameValueCollection 我不断收到异常告诉我添加一种又一种类型 添加它们后 我终于得到了 类型 System Object 无法添加到已知类型列表 因为另一个类型 System Collect
  • 为什么 JavaScript 中的函数是对象?

    请向我解释一下为什么函数是 javascript 中的对象 对象是具有属性的结构 属性的值可以是一个函数 我们称这个属性为方法 但我们不能执行一个对象 我们不能这样做 var cat name Murzik age 17 cat 但我们可以
  • Swift 3 - 准备 Segue

    我的故事板中有 3 个场景 我的初始视图控制器是一个导航控制器 然后根视图控制器与 UI ViewController 视图控制器 a 有一个关系 然后我有一个从 ViewController 中的按钮到第三个 ViewController
  • 上传base64图像facebook graph api 如何使用这个脚本

    上传 Base64 图像 Facebook Graph API我想使用附加链接的这个脚本 如何在我的 WordPress 帖子中使用它 我想用它作为 Facebook 封面照片网站 看看我从各种示例中拼凑而成的代码 您可以使用它将纯 bas
  • 使用 Excel VBA 抓取 HTML

    我一直在尝试抓取并解析网站上的一些财务数据 以便我可以使用 VBA 将数据添加到 Excel 电子表格中 我找到了几种可能的解决方案 但我似乎无法让它们适合我的参数 我的问题是我只需要表中的一个变量 平均目标价格 我一直无法弄清楚我做错了什
  • 将 SQLite 数据库中存储的经度和纬度数据导出到文件以便可以通过网站导入到 Google Map API 的最简单方法是什么?

    我创建了一个应用程序 它在 SQLite 数据库中记录一系列经度和纬度值 并将它们显示为 MapActivity 上的彩色轨迹 我现在希望能够以某种方式导出这些数据 最好导出到文件 以便用户可以将这些值上传到显示 Google Map AP
  • php在上传时调整图像大小

    我得到了一个表单 用户可以在其中插入一些数据并上传图像 为了处理图像 我得到了以下代码 define MAX SIZE 10000 errors 0 image FILES fileField name uploadedfile FILES