在我的一个应用程序中,我使用下面的代码片段将上传的图像复制到目录中。它可以正常工作,但是复制大图像(> 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/>"; } } } ?>