Announcement

Collapse
No announcement yet.

Bilder automatisch quadratisch machen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bilder automatisch quadratisch machen?

    Hallo zusammen,

    gibt es mit PHP die Möglichkeit aus Bildern die in unterschiedlichen Formaten vorliegen immer quadratische Bilder zu machen?
    Beispiel:

    Originalbild: 1000 x 200 Pixel zu 1000 x 1000 Pixel

    Das ganze ohne zu skalieren, also sozusagen nur den fehlenden Bildraum weiß auffüllen.

    Gruß Nevada

  • #2


    Sicher.
    Dein Hoster sollte die Bibliothek MAGICK eingebunden haben. Damit kannst du das Image in der Größe ändern (scale)
    Bsp. so

    Code:
    class ImageUtil{
    
        public $imgObject;
    
        public function __construct(){
            $this->imgObject=new Imagick();
        }
    
        public function loadImage($path){
            $this->path=$path;
            if(!$this->imgObject->readImage($path)){
                $this->logToFile('Image konnte nicht gelesen werden');
            }
        }
    
        public function loadImageFromBlob($blob){
            if(!$this->imgObject->readImageBlob($blob)){
                $this->logToFile('ImageBLOB konnte nicht gelesen werden');
            }
        }
    
        public function saveImage($path){
            if(!$this->imgObject->writeImage($path)){
                $this->logToFile('Image konnte nicht gespeichert werden');
            }
        }
    
        public function rotateImage($color,$grad){
            if(!$this->imgObject->rotateImage($color,$grad)){
                $this->logToFile('Image konnte nicht gedreht werden');
            }
        }
    
        public function rotateImageRight($color="white"){
            if(!$this->imgObject->rotateImage($color,90)){
                $this->logToFile('Image konnte nicht gedreht werden');
            }
        }
    
        public function rotateImageLeft($color="white"){
            if(!$this->imgObject->rotateImage($color,270)){
                $this->logToFile('Image konnte nicht gedreht werden');
            }
        }
    
        public function scaleImage($width,$height){
            try{
                if($this->imgObject->getImageWidth()>$width||$this->imgObject->getImageHeight()>$height){
                    if($this->imgObject->getImageWidth()>$this->imgObject->getImageHeight()){
                        $this->imgObject->scaleImage($width,0);
                    }else{
                        $this->imgObject->scaleImage(0,$height);
                    }
                }
            }catch(Exception $e){
                $this->logToFile('Image konnte nicht geändert werden: '.$e->getMessage());
            }
        }
    
        public function getBlob(){
            return $this->imgObject->getImageBlob();
        }
    
        public function getJPGBlob(){
            $this->imgObject->setImageCompression(Imagick::COMPRESSION_JPEG);
            $this->imgObject->setImageCompressionQuality(60);
            $this->imgObject->setImageFormat('JPEG');
            return $this->imgObject->getImageBlob();
        }
    
        protected function logToFile($text){
            error_log(date("Y.m.d H:i:s ").$text."\n",3,"_error.log");
        }
    
        public function __destruct(){
            $this->imgObject->clear();
            $this->imgObject->destroy();
        }
    
    }
    Christian

    Comment


    • #3
      Danke für Deine Antwort. Das Bild darf aber nicht dabei skaliert werden. Sprich, wenn das Bild 1000 Pixel hoch und 200 Pixel breit ist, soll einfach nur rechts und links
      je 400 Pixel weiß aufgefüllt werden.

      Warum kann ich hier keine Beispielbilder hochladen? Fehlermeldung:

      Image resize failed due to your image library not having support for this image type.

      ist ein einfaches jpg.

      Comment


      • #4
        Dann schau dir die Methode resizeImage an und für beide den Parameter bestfit
        Christian

        Comment


        • #5
          Hab ich gerade probiert. Hier gibt es so ein Online Tool: https://phpimagick.com/Imagick/resiz..._path=Lorikeet

          Funktioniert leider nicht, wenn ich das Bild Quadratische machen will wird es verzerrt.

          Comment


          • #6
            Dann musst du nach einer anderen Lib suchen. Warum packst du das Bild nicht auf ein weißes Div...
            Christian

            Comment


            • #7
              https://phpimagick.com/Imagick/exten..._path=Lorikeet
              Christian

              Comment


              • #8
                Danke für die Info! Ich werde das mal probieren.

                Comment

                Working...
                X