Ich möchte ein Bild in PHP beschneiden und die Datei speichern. Ich weiß, dass du die GD-Bibliothek benutzen solltest, aber ich weiß nicht, wie. Irgendwelche Ideen?Bild in PHP zuschneiden
Dank
Ich möchte ein Bild in PHP beschneiden und die Datei speichern. Ich weiß, dass du die GD-Bibliothek benutzen solltest, aber ich weiß nicht, wie. Irgendwelche Ideen?Bild in PHP zuschneiden
Dank
könnten Sie imagecopy
verwenden, um einen gewünschten Teil eines Bildes zu beschneiden. Der Befehl so geht:
imagecopy (
resource $dst_im - the image object ,
resource $src_im - destination image ,
int $dst_x - x coordinate in the destination image (use 0) ,
int $dst_y - y coordinate in the destination image (use 0) ,
int $src_x - x coordinate in the source image you want to crop ,
int $src_y - y coordinate in the source image you want to crop ,
int $src_w - crop width ,
int $src_h - crop height
)
-Code von PHP.net - ein 80x40 Pixel Bild wird von einem Quellbild abgeschnitten
<?php
// Create image instances
$src = imagecreatefromgif('php.gif');
$dest = imagecreatetruecolor(80, 40);
// Copy
imagecopy($dest, $src, 0, 0, 20, 13, 80, 40);
// Output and free from memory
header('Content-Type: image/gif');
imagegif($dest);
imagedestroy($dest);
imagedestroy($src);
?>
ein Bild zu beschneiden GD verwenden Sie eine Kombination von GD Methoden verwenden, und wenn Sie sich "Beispiel # 1" in der PHP-Dokumentation der imagecopyresampled
-Methode ansehen, zeigt es Ihnen, wie Sie ein Bild zuschneiden und ausgeben, Sie müssten nur etwas Code hinzufügen, um die Ausgabe zu erfassen und in eine Datei zu schreiben.
http://us2.php.net/manual/en/function.imagecopyresampled.php
Es gibt auch andere Optionen, einschließlich Image Magick, die installiert, wenn auf Ihrem Server zugegriffen werden kann exec
Methode direkt von PHP (oder ähnlich) oder Sie können die PHP Imagick Erweiterung installieren, die eine höhere Bildqualität liefert und, in meiner Meinung nach, ist ein wenig intuitiver und flexibler zu arbeiten.
Schließlich habe ich die Open Source PHPThumb Klassenbibliothek verwendet, die eine ziemlich einfache Schnittstelle hat und mit mehreren Optionen arbeiten kann, abhängig davon, was auf Ihrem Server ist, einschließlich ImageMagick und GD.
Ich benutze dieses Skript in einigen Projekten und es ist ziemlich einfach zu bedienen: http://shiftingpixel.com/2008/03/03/smart-image-resizer/
Das Skript benötigt PHP 5.1.0 (die 2005-11-24 da ist out - Zeit, wenn noch nicht auf diese aktualisieren Version) und GD (was bei guten Webhosts selten fehlt). Hier
ist ein Beispiel dafür den Einsatz in Ihrem HTML ist:
<img src="/image.php/coffee-bean.jpg?width=200&height=200&image=/wp-content/uploads/2008/03/coffee-bean.jpg" alt="Coffee Bean" />
Diese Funktion Bild zuschneiden Bildseitenverhältnis beibehalten wird :)
function resize_image_crop($image, $width, $height)
{
$w = @imagesx($image); //current width
$h = @imagesy($image); //current height
if ((!$w) || (!$h)) { $GLOBALS['errors'][] = 'Image couldn\'t be resized because it wasn\'t a valid image.'; return false; }
if (($w == $width) && ($h == $height)) { return $image; } //no resizing needed
$ratio = $width/$w; //try max width first...
$new_w = $width;
$new_h = $h * $ratio;
if ($new_h < $height) { //if that created an image smaller than what we wanted, try the other way
$ratio = $height/$h;
$new_h = $height;
$new_w = $w * $ratio;
}
$image2 = imagecreatetruecolor ($new_w, $new_h);
imagecopyresampled($image2,$image, 0, 0, 0, 0, $new_w, $new_h, $w, $h);
if (($new_h != $height) || ($new_w != $width)) { //check to see if cropping needs to happen
$image3 = imagecreatetruecolor ($width, $height);
if ($new_h > $height) { //crop vertically
$extra = $new_h - $height;
$x = 0; //source x
$y = round($extra/2); //source y
imagecopyresampled($image3,$image2, 0, 0, $x, $y, $width, $height, $width, $height);
} else {
$extra = $new_w - $width;
$x = round($extra/2); //source x
$y = 0; //source y
imagecopyresampled($image3,$image2, 0, 0, $x, $y, $width, $height, $width, $height);
}
imagedestroy($image2);
return $image3;
} else {
return $image2;
}
}
Sollte nicht mehrere imagecopyresampled Anrufe tun, kann es alle auf einen Anruf erfolgen, wenn der Offset in der $ Breite berechnet wird und $ Höhe. Außerdem ist es möglicherweise vorzuziehen, die Größenänderung immer zu erzwingen, um sicherzustellen, dass das Bild in einem neuen Format gespeichert wird, in dem zusätzliche überflüssige Dateien und Header entfernt und eine bestimmte Qualität erzwungen wird. – Exit
Sie unter Methode zur Ernte Bild verwenden können,
/*parameters are
$image =source image name
$width = target width
$height = height of image
$scale = scale of image*/
function resizeImage($image,$width,$height,$scale) {
//generate new image height and width of source image
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
//Create a new true color image
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
//Create a new image from file
$source = imagecreatefromjpeg($image);
//Copy and resize part of an image with resampling
imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
//Output image to file
imagejpeg($newImage,$image,90);
//set rights on image file
chmod($image, 0777);
//return crop image
return $image;
}
Es kann für Benutzer hilfreich sein, wenn Sie Ihrem Code Kommentare hinzufügen, um zu erläutern, welche Schlüsselteile dies tun. Dies würde ihnen helfen, Ihren Code besser zu verstehen und anzuwenden – shrmn
ok, ich habe hinzugefügt –
Ich habe gerade diese Funktion erstellt und es funktioniert für meine Bedürfnisse, Erstellen einer zentrierten und beschnittenen Vorschaubild. Es ist optimiert und erfordert nicht mehrere Imagecopy-Aufrufe, wie in der WebGautam-Antwort gezeigt.
Geben Sie den Bildpfad, die endgültige Breite und Höhe und optional die Qualität des Bilds an. Ich habe dies zum Erstellen von Thumbnails gemacht, also werden alle Bilder als JPGs gespeichert, Sie können sie bearbeiten, um andere Bildtypen aufzunehmen, wenn Sie sie benötigen. Der Hauptpunkt hier ist die Mathematik und die Methode der Verwendung von imagecopyresampled, um ein Thumbnail zu erzeugen. Bilder werden unter dem gleichen Namen und der Bildgröße gespeichert.
function resize_crop_image($image_path, $end_width, $end_height, $quality = '') {
if ($end_width < 1) $end_width = 100;
if ($end_height < 1) $end_height = 100;
if ($quality < 1 || $quality > 100) $quality = 60;
$image = false;
$dot = strrpos($image_path,'.');
$file = substr($image_path,0,$dot).'-'.$end_width.'x'.$end_height.'.jpg';
$ext = substr($image_path,$dot+1);
if ($ext == 'jpg' || $ext == 'jpeg') $image = @imagecreatefromjpeg($image_path);
elseif($ext == 'gif') $image = @imagecreatefromgif($image_path);
elseif($ext == 'png') $image = @imagecreatefrompng($image_path);
if ($image) {
$width = imagesx($image);
$height = imagesy($image);
$scale = max($end_width/$width, $end_height/$height);
$new_width = floor($scale*$width);
$new_height = floor($scale*$height);
$x = ($new_width != $end_width ? ($width - $end_width)/2 : 0);
$y = ($new_height != $end_height ? ($height - $end_height)/2 : 0);
$new_image = @imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image,$image,0,0,$x,$y,$new_width,$new_height,$width - $x,$height - $y);
imagedestroy($image);
imagejpeg($new_image,$file,$quality);
imagedestroy($new_image);
return $file;
}
return false;
}
Danke für die schnelle Antwort !! – user244228
Wendet diese Methode keinen schwarzen Hintergrund zu PNG-Bildern? Ich meine über den transparenten Hintergrund? – bayblade567