wake-up-neo.com

Ändern Sie die Größe von Bildern PHP ohne Fremdbibliotheken zu verwenden?

In einer meiner Anwendungen verwende ich den folgenden Code-Ausschnitt, um hochgeladene Bilder in ein Verzeichnis zu kopieren. Es funktioniert gut, aber das Kopieren großer Bilder (> 2 MB) braucht mehr Zeit als ideal und ich brauche wirklich keine so großen Bilder. Daher suche ich nach einer Möglichkeit, die Größe der Bilder zu ändern. Wie erreicht man das mit 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) {

            // ...

        }

    }

}

?>
12
Mateus

Schließlich habe ich einen Weg gefunden, der meinen Bedürfnissen entspricht. Mit dem folgenden Snippet wird die Größe eines Bildes auf die angegebene Breite geändert. Die Höhe wird automatisch berechnet, um den Anteil beizubehalten.

$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);

Für alle anderen, die ein vollständiges Beispiel suchen, erstellen Sie zwei Dateien:

<!-- 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/>";

        }

    }

}

?>
31
Mateus

Ich habe eine Funktion erstellt, um das Bild um die Hälfte zu verkleinern, der Code ist unten.

        function imgResize($path) {

           $x = getimagesize($path);            
           $width  = $x['0'];
           $height = $x['1'];

           $rs_width  = $width / 2;//resize to half of the original width.
           $rs_height = $height / 2;//resize to half of the original height.

           switch ($x['mime']) {
              case "image/gif":
                 $img = imagecreatefromgif($path);
                 break;
              case "image/jpg":
              case "image/jpeg":
                 $img = imagecreatefromjpeg($path);
                 break;
              case "image/png":
                 $img = imagecreatefrompng($path);
                 break;
           }

           $img_base = imagecreatetruecolor($rs_width, $rs_height);
           imagecopyresized($img_base, $img, 0, 0, 0, 0, $rs_width, $rs_height, $width, $height);

           $path_info = pathinfo($path);    
           switch ($path_info['extension']) {
              case "gif":
                 imagegif($img_base, $path);  
                 break;
            case "jpg":
            case "jpeg":
                 imagejpeg($img_base, $path);
                 break;
              case "png":
                 imagepng($img_base, $path);  
                 break;
           }

        }

und Sie könnten die Funktion mit unten aufrufen.

$img = imgResize('c:/dir/image.png');
8
Jake

für alle Bildtypen gibt es 1 sehr einfache Funktion zur Bildgrößenänderung, die die Transparenz beibehält und sehr einfach zu bedienen ist 

auschecken :

https://github.com/Nimrod007/PHP_image_resize

hoffe das hilft

6
Nimrod007

ImageMagick ist der schnellste und wahrscheinlich beste Weg, um die Größe von Bildern in PHP zu ändern. Schauen Sie sich verschiedene Beispiele an hier . Dieses Beispiel zeigt, wie Sie die Größe von beim Bild hochladen ändern.

3
Chibueze Opata

Sie können auch eine x * y/width-Methode zum Ändern der Größe und zum Aufruf von imagecopyresampled () verwenden, wie unter http://www.virtualsecrets.com/upload-resize-image-php-mysql.html Diese Seite angezeigt fügt auch Bilder (nach der Größenänderung) über PDO in mySQL ein.

0
FellowCoder

Dank an Mateus Nunes! Ich habe seine Arbeit etwas überarbeitet, damit transparente PNGs funktionieren:

$source         = $_FILES["..."]["tmp_name"];
$destination    = 'abc/def/ghi.png';
$maxsize        = 45;

$size = getimagesize($source);
$width_orig = $size[0];
$height_orig = $size[1];
unset($size);
$height = $maxsize+1;
$width = $maxsize;
while($height > $maxsize){
    $height = round($width*$height_orig/$width_orig);
    $width = ($height > $maxsize)?--$width:$width;
}
unset($width_orig,$height_orig,$maxsize);
$images_orig    = imagecreatefromstring( file_get_contents($source) );
$photoX         = imagesx($images_orig);
$photoY         = imagesy($images_orig);
$images_fin     = imagecreatetruecolor($width,$height);
imagesavealpha($images_fin,true);
$trans_colour   = imagecolorallocatealpha($images_fin,0,0,0,127);
imagefill($images_fin,0,0,$trans_colour);
unset($trans_colour);
ImageCopyResampled($images_fin,$images_orig,0,0,0,0,$width+1,$height+1,$photoX,$photoY);
unset($photoX,$photoY,$width,$height);
imagepng($images_fin,$destination);
unset($destination);
ImageDestroy($images_orig);
ImageDestroy($images_fin);
0
cottton