Bild in PHP zuschneiden

Lesezeit: 8 Minuten

Bild in PHP zuschneiden
Benutzer195257

Der folgende Code schneidet das Bild gut zu, was ich will, aber für größere Bilder funktioniert es auch nicht. Gibt es eine Möglichkeit, aus dem Bild herauszuzoomen?

Idealerweise wäre ich in der Lage, jedes Bild vor dem Zuschneiden ungefähr gleich groß zu haben, damit ich jedes Mal gute Ergebnisse erhalte

Code ist

<?php

$image = $_GET['src']; // the image to crop
$dest_image="images/cropped_whatever.jpg"; // make sure the directory is writeable

$img = imagecreatetruecolor('200','150');
$org_img = imagecreatefromjpeg($image);
$ims = getimagesize($image);
imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150);
imagejpeg($img,$dest_image,90);
imagedestroy($img);
echo '<img src="'.$dest_image.'" ><p>';

  • Versuchen Sie, Thumbnails zu erstellen?

    – Tatu Ulmanen

    6. Dezember 2009 um 17:47 Uhr

  • Ja, ich versuche Thumbnails zu erstellen

    – Benutzer195257

    6. Dezember 2009 um 18:24 Uhr

  • Für solche Aufgaben sollten Sie eine Bibliothek verwenden. Ich empfehle Interventionsbild. Sehen Sie sich zum Beispiel diese Methoden an: resize(), fit().

    – Grasdoppelt

    30. Juni 2017 um 10:53 Uhr

  • erklären ($img,$org_img, 0, 0, 20, 20, 200, 150). Ersetzen src mit meinem Dateinamen (weather.jpg) ist fehlgeschlagen.

    – irgendeinBadhat

    18. Januar 2020 um 7:23 Uhr


1647935648 775 Bild in PHP zuschneiden
Tatu Ulmanen

Wenn Sie versuchen, Miniaturansichten zu generieren, müssen Sie zuerst die Größe des Bildes mit ändern imagecopyresampled();. Sie müssen die Größe des Bildes so ändern, dass die Größe der kleineren Seite des Bildes der entsprechenden Seite des Daumens entspricht.

Wenn Ihr Quellbild beispielsweise 1280 x 800 Pixel und Ihr Daumen 200 x 150 Pixel groß ist, müssen Sie die Größe Ihres Bilds auf 240 x 150 Pixel ändern und es dann auf 200 x 150 Pixel zuschneiden. Dadurch ändert sich das Seitenverhältnis des Bildes nicht.

Hier ist eine allgemeine Formel zum Erstellen von Miniaturansichten:

$image = imagecreatefromjpeg($_GET['src']);
$filename="images/cropped_whatever.jpg";

$thumb_width = 200;
$thumb_height = 150;

$width = imagesx($image);
$height = imagesy($image);

$original_aspect = $width / $height;
$thumb_aspect = $thumb_width / $thumb_height;

if ( $original_aspect >= $thumb_aspect )
{
   // If image is wider than thumbnail (in aspect ratio sense)
   $new_height = $thumb_height;
   $new_width = $width / ($height / $thumb_height);
}
else
{
   // If the thumbnail is wider than the image
   $new_width = $thumb_width;
   $new_height = $height / ($width / $thumb_width);
}

$thumb = imagecreatetruecolor( $thumb_width, $thumb_height );

// Resize and crop
imagecopyresampled($thumb,
                   $image,
                   0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
                   0 - ($new_height - $thumb_height) / 2, // Center the image vertically
                   0, 0,
                   $new_width, $new_height,
                   $width, $height);
imagejpeg($thumb, $filename, 80);

Habe das aber nicht getestet sollte Arbeit.

BEARBEITEN

Jetzt getestet und funktioniert.

  • Danke für die Hilfe, aber es funktioniert nicht, ich kann nichts falsch mit dem Code sehen?

    – Benutzer195257

    6. Dezember 2009 um 18:23 Uhr

  • Hab es irgendwie zum laufen bekommen t-webdesign.co.uk/crop.php?src=http://extreme-showcase.com/… Aber es funktioniert vertikal nicht gut, irgendeine Hilfe?

    – Benutzer195257

    6. Dezember 2009 um 18:40 Uhr

  • Danke, immer noch nicht die richtigen Ergebnisse, siehe Link oben, dankesss

    – Benutzer195257

    6. Dezember 2009 um 18:44 Uhr

  • Okay, vielleicht sollte ich es zuerst selbst testen. Gib mir eine Sekunde und ich werde eine gefixte Version posten.

    – Tatu Ulmanen

    6. Dezember 2009 um 18:54 Uhr

  • Einfach ersetzen $image = imagecreatefromjpeg($_GET['src']); mit $image = imagecreatefromstring(file_get_contents($_GET['src']));.

    – Tatu Ulmanen

    26. Januar 2012 um 11:21 Uhr

1647935649 633 Bild in PHP zuschneiden
Eranda

imagecopyresampled() nimmt eine rechteckige Fläche ab $src_image von Breite $src_w und Höhe $src_h an Stelle ($src_x, $src_y) und platzieren Sie es in einem rechteckigen Bereich von $dst_image von Breite $dst_w und Höhe $dst_h an Stelle ($dst_x, $dst_y).

Wenn sich Quell- und Zielkoordinaten sowie Breite und Höhe unterscheiden, wird eine entsprechende Dehnung oder Verkleinerung des Bildfragments durchgeführt. Die Koordinaten beziehen sich auf die obere linke Ecke.

Diese Funktion kann verwendet werden, um Bereiche innerhalb desselben Bildes zu kopieren. Wenn sich die Regionen jedoch überschneiden, sind die Ergebnisse unvorhersehbar.

– Bearbeiten –

Wenn $src_w und $src_h sind kleiner als $dst_w und $dst_h bzw. wird das Daumenbild vergrößert. Anderenfalls wird es verkleinert.

<?php
$dst_x = 0;   // X-coordinate of destination point
$dst_y = 0;   // Y-coordinate of destination point
$src_x = 100; // Crop Start X position in original image
$src_y = 100; // Crop Srart Y position in original image
$dst_w = 160; // Thumb width
$dst_h = 120; // Thumb height
$src_w = 260; // Crop end X position in original image
$src_h = 220; // Crop end Y position in original image

// Creating an image with true colors having thumb dimensions (to merge with the original image)
$dst_image = imagecreatetruecolor($dst_w, $dst_h);
// Get original image
$src_image = imagecreatefromjpeg('images/source.jpg');
// Cropping
imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
// Saving
imagejpeg($dst_image, 'images/crop.jpg');
?>

  • Während eine Antwort nur mit Code funktionieren könnte, ist es am besten, wenn die Antwort zumindest eine kleine Erklärung der Funktionsweise enthält, damit die Leute den Code verstehen können, ohne jede Codezeile lesen und mental interpretieren zu müssen.

    – Fluffeh

    27. September 2012 um 10:28 Uhr

php 5.5 hat eine Imagecrop-Funktion http://php.net/manual/en/function.imagecrop.php

1647935649 957 Bild in PHP zuschneiden
Harry Fairbanks

$image = imagecreatefromjpeg($_GET['src']);

Muss ersetzt werden durch:

$image = imagecreatefromjpeg('images/thumbnails/myimage.jpg');

Weil imagecreatefromjpeg() erwartet einen String.
Das hat bei mir funktioniert.

Referenz:
http://php.net/manual/en/function.imagecreatefromjpeg.php

HTML Quelltext:-

enter code here
  <!DOCTYPE html>
  <html>
  <body>

  <form action="upload.php" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="image" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
 </form>

 </body>
 </html>

hochladen.php

enter code here
<?php 
      $image = $_FILES;
      $NewImageName = rand(4,10000)."-". $image['image']['name'];
      $destination = realpath('../images/testing')."https://stackoverflow.com/";
      move_uploaded_file($image['image']['tmp_name'], $destination.$NewImageName);
      $image = imagecreatefromjpeg($destination.$NewImageName);
      $filename = $destination.$NewImageName;

      $thumb_width = 200;
      $thumb_height = 150;

      $width = imagesx($image);
      $height = imagesy($image);

      $original_aspect = $width / $height;
      $thumb_aspect = $thumb_width / $thumb_height;

      if ( $original_aspect >= $thumb_aspect )
      {
         // If image is wider than thumbnail (in aspect ratio sense)
         $new_height = $thumb_height;
         $new_width = $width / ($height / $thumb_height);
      }
      else
      {
         // If the thumbnail is wider than the image
         $new_width = $thumb_width;
         $new_height = $height / ($width / $thumb_width);
      }

      $thumb = imagecreatetruecolor( $thumb_width, $thumb_height );

      // Resize and crop
      imagecopyresampled($thumb,
                         $image,
                         0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
                         0 - ($new_height - $thumb_height) / 2, // Center the image vertically
                         0, 0,
                         $new_width, $new_height,
                         $width, $height);
      imagejpeg($thumb, $filename, 80);
      echo "cropped"; die;
      ?>  

1647935650 99 Bild in PHP zuschneiden
Nadeem0035

Verbesserte Funktion zum sofortigen Zuschneiden von Bildern in PHP.

http://www.example.com/cropimage.php?filename=a.jpg&newxsize=100&newysize=200&constrain=1

Codieren Sie ein cropimage.php

$basefilename = @basename(urldecode($_REQUEST['filename']));

$path="images/";
$outPath="crop_images/";
$saveOutput = false; // true/false ("true" if you want to save images in out put folder)
$defaultImage="no_img.png"; // change it with your default image

$basefilename = $basefilename;
$w = $_REQUEST['newxsize'];
$h = $_REQUEST['newysize'];

if ($basefilename == "") {
    $img = $path . $defaultImage;
    $percent = 100;
} else {
    $img = $path . $basefilename;

    $len = strlen($img);
    $ext = substr($img, $len - 3, $len);
    $img2 = substr($img, 0, $len - 3) . strtoupper($ext);
    if (!file_exists($img)) $img = $img2;
    if (file_exists($img)) {
        $percent = @$_GET['percent'];
        $constrain = @$_GET['constrain'];
        $w = $w;
        $h = $h;
    } else if (file_exists($path . $basefilename)) {
        $img = $path . $basefilename;
        $percent = $_GET['percent'];
        $constrain = $_GET['constrain'];
        $w = $w;
        $h = $h;
    } else {

        $img = $path . 'no_img.png';    // change with your default image
        $percent = @$_GET['percent'];
        $constrain = @$_GET['constrain'];
        $w = $w;
        $h = $h;

    }

}

// get image size of img
$x = @getimagesize($img);

// image width
$sw = $x[0];
// image height
$sh = $x[1];

if ($percent > 0) {
    // calculate resized height and width if percent is defined
    $percent = $percent * 0.01;
    $w = $sw * $percent;
    $h = $sh * $percent;
} else {
    if (isset ($w) AND !isset ($h)) {
        // autocompute height if only width is set
        $h = (100 / ($sw / $w)) * .01;
        $h = @round($sh * $h);
    } elseif (isset ($h) AND !isset ($w)) {
        // autocompute width if only height is set
        $w = (100 / ($sh / $h)) * .01;
        $w = @round($sw * $w);
    } elseif (isset ($h) AND isset ($w) AND isset ($constrain)) {
        // get the smaller resulting image dimension if both height
        // and width are set and $constrain is also set
        $hx = (100 / ($sw / $w)) * .01;
        $hx = @round($sh * $hx);

        $wx = (100 / ($sh / $h)) * .01;
        $wx = @round($sw * $wx);

        if ($hx < $h) {
            $h = (100 / ($sw / $w)) * .01;
            $h = @round($sh * $h);
        } else {
            $w = (100 / ($sh / $h)) * .01;
            $w = @round($sw * $w);
        }
    }
}

$im = @ImageCreateFromJPEG($img) or // Read JPEG Image
$im = @ImageCreateFromPNG($img) or // or PNG Image
$im = @ImageCreateFromGIF($img) or // or GIF Image
$im = false; // If image is not JPEG, PNG, or GIF

if (!$im) {
    // We get errors from PHP's ImageCreate functions...
    // So let's echo back the contents of the actual image.
    readfile($img);
} else {
    // Create the resized image destination
    $thumb = @ImageCreateTrueColor($w, $h);
    // Copy from image source, resize it, and paste to image destination
    @ImageCopyResampled($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh);

    //Other format imagepng()

    if ($saveOutput) { //Save image
        $save = $outPath . $basefilename;
        @ImageJPEG($thumb, $save);
    } else { // Output resized image
        header("Content-type: image/jpeg");
        @ImageJPEG($thumb);
    }
}

Bild in PHP zuschneiden
Nabi Kas

Sie können verwenden imagecrop Funktion in (PHP 5 >= 5.5.0, PHP 7)

Beispiel:

<?php
$im = imagecreatefrompng('example.png');
$size = min(imagesx($im), imagesy($im));
$im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size]);
if ($im2 !== FALSE) {
    imagepng($im2, 'example-cropped.png');
    imagedestroy($im2);
}
imagedestroy($im);
?>

1005440cookie-checkBild in PHP zuschneiden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy