当前位置: 首页 > 面试题库 >

在不使用第三方库的情况下在PHP中调整图像大小?

花博厚
2023-03-14
问题内容

在我的一个应用程序中,我使用下面的代码片段将上传的图像复制到目录中。它可以正常工作,但是复制大图像(>
2MB)会花费比理想时间更多的时间,而且我真的不需要这么大的图像,因此,我正在寻找一种调整图像大小的方法。如何使用PHP实现呢?

<?php

$uploadDirectory = 'images/0001/';
$randomNumber = rand(0, 99999); 
$filename = basename($_FILES['userfile']['name']);
$filePath = $uploadDirectory.md5($randomNumber.$filename);

// Check if the file was sent through HTTP POST.

if (is_uploaded_file($_FILES['userfile']['tmp_name']) == true) {

    // Validate the file size, accept files under 5 MB (~5e+6 bytes).

    if ($_FILES['userfile']['size'] <= 5000000) {

        // Move the file to the path specified.

        if (move_uploaded_file($_FILES['userfile']['tmp_name'], $filePath) == true) {

            // ...

        }

    }

}

?>

问题答案:

最后,我发现了一种适合我需求的方法。以下代码段会将图像调整为指定的宽度,并自动计算高度以保持比例。

$image = $_FILES["image"]["tmp_name"];
$resizedDestination = $uploadDirectory.md5($randomNumber.$filename)."_RESIZED.jpg";

copy($_FILES, $resizedDestination);

$imageSize = getImageSize($image);
$imageWidth = $imageSize[0];
$imageHeight = $imageSize[1];

$DESIRED_WIDTH = 100;
$proportionalHeight = round(($DESIRED_WIDTH * $imageHeight) / $imageWidth);

$originalImage = imageCreateFromJPEG($image);

$resizedImage = imageCreateTrueColor($DESIRED_WIDTH, $proportionalHeight);

imageCopyResampled($images_fin, $originalImage, 0, 0, 0, 0, $DESIRED_WIDTH+1, $proportionalHeight+1, $imageWidth, $imageHeight);
imageJPEG($resizedImage, $resizedDestination);

imageDestroy($originalImage);
imageDestroy($resizedImage);

对于寻求完整示例的其他任何人,请创建两个文件:

<!-- send.html -->

<html>

<head>

    <title>Simple File Upload</title>

</head>

<body>

    <center>

        <div style="margin-top:50px; padding:20px; border:1px solid #CECECE;">

            Select an image.

            <br/>
            <br/>

            <form action="receive.php" enctype="multipart/form-data" method="post">
                <input type="file" name="image" size="40">
                <input type="submit" value="Send">
            </form>

        </div>

    </center>

</body>



<?php

// receive.php

$randomNumber = rand(0, 99999);
$uploadDirectory = "images/";
$filename = basename($_FILES['file_contents']['name']);
$destination = $uploadDirectory.md5($randomNumber.$filename).".jpg";

echo "File path:".$filePath."<br/>";

if (is_uploaded_file($_FILES["image"]["tmp_name"]) == true) {

    echo "File successfully received through HTTP POST.<br/>";

    // Validate the file size, accept files under 5 MB (~5e+6 bytes).

    if ($_FILES['image']['size'] <= 5000000) {

        echo "File size: ".$_FILES["image"]["size"]." bytes.<br/>";

        // Resize and save the image.

        $image = $_FILES["image"]["tmp_name"];
        $resizedDestination = $uploadDirectory.md5($randomNumber.$filename)."_RESIZED.jpg";

        copy($_FILES, $resizedDestination);

        $imageSize = getImageSize($image);
        $imageWidth = $imageSize[0];
        $imageHeight = $imageSize[1];

        $DESIRED_WIDTH = 100;
        $proportionalHeight = round(($DESIRED_WIDTH * $imageHeight) / $imageWidth);

        $originalImage = imageCreateFromJPEG($image);

        $resizedImage = imageCreateTrueColor($DESIRED_WIDTH, $proportionalHeight);

        imageCopyResampled($images_fin, $originalImage, 0, 0, 0, 0, $DESIRED_WIDTH+1, $proportionalHeight+1, $imageWidth, $imageHeight);
        imageJPEG($resizedImage, $resizedDestination);

        imageDestroy($originalImage);
        imageDestroy($resizedImage);

        // Save the original image.

        if (move_uploaded_file($_FILES['image']['tmp_name'], $destination) == true) {

            echo "Copied the original file to the specified destination.<br/>";

        }

    }

}

?>


 类似资料:
  • 目前,我正在用下面的代码做一个非常简单的方法。 如果我删除代码的部分,它将图像打印为正常质量+正常大小,因为我希望它的高度限制在250,并返回类似于此图像的内容。 但它返回的内容类似于下面显示的内容。

  • 我想创建一个项目列表使用回收人员视图,并想展开特定项目时点击(如在电话呼叫列表)。我想实现这一点,而不使用任何库。有人能帮忙吗?

  • 问题内容: 我有一个快速的问题,我不太确定要进行设置。我在其他地方看到过示例,但没有什么比我的情况更具体。我想使用PHP调整图像的大小,以使图像易于阅​​读,而不仅仅是像使用HTML那样随意拉伸。如果它们的宽度不是250像素,也不是160像素,那么如何调整图片的大小,使其成比例但适合该空间? 谢谢! 问题答案: 好的,下面是我在商店中使用的Image对象。保持规模-需要GD 我在请求时调整图像的大

  • 问题内容: 我正在努力围绕其中心绘制旋转的位图,并在不调整位图大小的情况下进行旋转。我正在通过游戏线程将所有子画面绘制到屏幕上,因此我正在寻找一种包含原始位图而不是画布的解决方案。 提前致谢。 到目前为止,这是我的代码,它围绕其中心旋转一个位图,但对其进行了调整。 更新: 我注意到这并不像听起来那么容易。我的旋转代码不是问题。位图旋转,但是dst rect也必须根据旋转角度增加/减少,否则bima

  • 问题内容: 我需要调整图像大小,但是我想避免使用PIL,因为我无法使其在OS X下运行-不要问我为什么… 无论如何,因为我对gif / pgm / ppm感到满意,所以PhotoImage类对我来说还可以: 问题是-如何调整图像大小?以下仅适用于PIL,与非PIL等效吗? 谢谢! 问题答案: 因为这两个 和希望整数作为参数,我用这两种。 我不得不将320x320图片的尺寸调整为250x250,最终

  • 问题内容: 我可能在手册中找错了东西,但我想取一个图像对象并对其进行扩展,而无需调整原始图像的大小(拉伸/压缩)。 玩具示例:想象一个200 x 100的蓝色矩形,然后执行一些操作,然后有一个新的图像对象400 x 300,该对象由一个白色背景组成,上面有一个200 x 100的蓝色矩形。如果我可以控制扩展的方向或新的背景色等,则可获赠。 本质上,我有一个要迭代添加的图像,而且我不知道一开始的大小