zachęcam do głosowania: http://www.phpclasses.org/vote.html
Edit: Klasa znalazła swoje miejsce tu: http://www.phpclasses.org/browse/package/5181.html
Witam.
Potrzebowałem skryptu który będzie usuwał ramkę ze zdjęć (np. źle wycięte zdjęcie po skanowaniu).
Nie znalazłem niczego gotowego, więc napisałem sam.
Mam nadzieję, że komuś się przyda.
Uwagi jak najbardziej mile widziane.
Klasa:
<?php /******************************************************************************* * Software: removeBoderFromImage * * Version: 1.0 * * Date: 2009-02-19 * * Author: Pawel Antczak * * License: Freeware * * * * You may use, modify and redistribute this software as you wish. * *******************************************************************************/ class removeBoderFromImage { /* Original image */ private $image; /* Image MIME type */ private $imageType; /* Peak border color*/ private $peakColor; /* Image height */ private $imageHeight; /* Image weight */ private $imageWidth; /*Image name*/ private $imageName; /* Cropped image*/ private $croppedImage; /** Class constructor * @param string $image - original image path/URL * @param string $colorFactor - color mulitiplier; lower factor = smaller crop area */ public function __construct($image, $colorMultiplier = 0.95) { $this->imageName = $image; $this->imageHeight = $imageDetails[1]; $this->imageWidth = $imageDetails[0]; $this->imageType = $imageDetails['mime']; $this->peakColor = $this->getPeakColor() * $colorMultiplier; $this->removeBorder(); } /* * Internal function * Calculates crop area dimension */ private function removeBorder() { $newStartX = $this->imageHeight; $newStartY = $this->imageWidth; $newStopX = 0; $newStopY = 0; for ($i = 0 ; $i < $this->imageWidth ; $i++) { for ($ii = 0 ; $ii < $this->imageHeight ; $ii++) { if ($this->getPixelColor($this->image, $i, $ii) < $this->peakColor) { if ($i > $newStopX) $newStopX = $i; if ($ii > $newStopY) $newStopY = $ii; } } } for ($i = 0 ; $i < $this->imageWidth ; $i++) { for ($ii = 0 ; $ii < $this->imageHeight ; $ii++) { if ($this->getPixelColor($this->image, $i, $ii) < $this->peakColor) { if ($i < $newStartX) $newStartX = $i; if ($ii < $newStartY) $newStartY = $ii; } } } $this->cropImage($newStartX,$newStartY,$newStopX,$newStopY); } /* * Internal function * Returns color at pixel */ private function getPixelColor($image, $x, $y) { return imagecolorat($image, $x, $y); } /* * Internal function * Copy area from image to new one */ private function cropImage($newStartX, $newStartY, $newStopX, $newStopY) { $newwidth = $this->imageWidth; $newheight = $this->imageHeight; $cropped = imagecreatetruecolor($newStopX - $newStartX, $newStopY - $newStartY); imagecopyresized($cropped, $this->image, 0, 0, $newStartX, $newStartY, $newStopX - $newStartX, $newStopY - $newStartY, $newStopX - $newStartX, $newStopY - $newStartY); $this->croppedImage = $cropped; } /* * Internal function * Retuns image avarage color */ private function getPeakColor() { for ($i = 0 ; $i < $this->imageWidth ; $i++) { for ($ii = 0 ; $ii < $this->imageHeight ; $ii++) { $palette[] += $this->getPixelColor($this->image, $i, $ii); } } } /* * Removes border and send image to browser */ public function showImage() { imagejpeg($this->croppedImage); } /* * Removes border and save file * @param string $newImagePath - path to save new file * @param string $imageType - \"jpg\", \"gif\", \"png\" */ public function saveImage($newImagePath, $imageType = \"jpg\") { $newFileName = $newFileNameTemp[0].\".\".$imageType; switch($imageType) { case \"jpg\": imagejpeg($this->croppedImage,$newFileName); break; case \"png\": imagepng($this->croppedImage,$newFileName); break; case \"gif\": imagegif($this->croppedImage,$newFileName); break; default: imagejpeg($this->croppedImage,$newFileNameTemp[0].\".jpg\"); } } /* * Removes border and returns image */ public function getImage() { return $this->croppedImage; } } ?>
Użycie klasy:
<?php require \"removeBorderFromImage.php\"; $rbfi = new removeBoderFromImage(\"img.jpg\"); $cropped = $rbfi->getImage(); //zwraca wycinek $rbfi->saveImage(\"c:wycinek\", \"png\"); //zapisuje plik na dysku $rbfi->showImage(); //wysyla wycinek do przegladarki ?>