webForumDet fria alternativet

CropImage

7 svar · 434 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Har denna koden och om jag sätter att den skall bli ex 300 x 300 så blir bilden i rätt proportion men vill jag den beskärda bilden skal lblir 300 x 200 så blir det helt fel. Nån som kan hjälpa mig med detta?

function CropImage($dir,$filen) {
	$file     = $dir.$filen;
	$destfile = $dir."/300/".$filen;
	
  	/* Bestäm höjden och bredden på bilden. */ 
  	$dstWH = 300; 
  	$dst_img = imageCreateTruecolor($dstWH, $dstWH); 
  	$src_img = imagecreatefromjpeg($file); 
 
  	$image_width  = ImageSX($src_img); 
  	$image_height = ImageSY($src_img); 
  
  	if ($image_height  >= $image_width) { 
    		$srcX = 0; 
    		$srcY = 0; 
    		$srcW = $image_width; 
    		$srcH = $image_width; 
  	} else { 
    		$srcX = round(($image_width - $image_height)/2); 
    		$srcY = 0; 
    		$srcW = $image_height; 
    		$srcH = $image_height; 
  	} 
  
  	/* Skapa bilden */ 
  	imagecopyresampled ( $dst_img, $src_img, 0, 0, $srcX, $srcY, $dstWH,  $dstWH, $srcW, $srcH ); 
 
  	/* Sökvägen dit den nya bilden ska hamna och kvalitén på bilden. */ 
  	imagejpeg($dst_img, $destfile, 100); 
}
headbugMedlem sedan sep. 2006867 inlägg
#2

Jo, nu är jag ingen PHP-guru, men hela ditt script jobbar ju mot förutsättningen att du vill skapa en bild som är liksidig.

Så hur gör du när du vill göra om det till 300x200? Posta den koden också!

Och vad innebär "helt fel"? Det går nog att få till en massa olika fel :)

AsaMedlem sedan dec. 20011 860 inlägg
#3

Så här ändrade jag till men det blev ju helt fel ialalfall:

function CropImage($dir,$filen) {
	$file     = $dir.$filen;
	$destfile = $dir."/300/".$filen;
	
  	/* Bestäm höjden och bredden på bilden. */ 
  	$dstW = 300; 
  	$dstH = 200; 
  	$dst_img = imageCreateTruecolor($dstW, $dstH); 
  	$src_img = imagecreatefromjpeg($file); 
 
  	$image_width  = ImageSX($src_img); 
  	$image_height = ImageSY($src_img); 
  
  	if ($image_height  >= $image_width) { 
    		$srcX = 0; 
    		$srcY = 0; 
    		$srcW = $image_width; 
    		$srcH = $image_height; 
  	} else { 
    		$srcX = round(($image_width - $image_height)/2); 
    		$srcY = 0; 
    		$srcW = $image_width; 
    		$srcH = $image_height; 
  	} 
  
  	/* Skapa bilden */ 
  	imagecopyresampled ( $dst_img, $src_img, 0, 0, $srcX, $srcY, $dstW,  $dstH, $srcW, $srcH ); 
 
  	/* Sökvägen dit den nya bilden ska hamna och kvalitén på bilden. */ 
  	imagejpeg($dst_img, $destfile, 100); 
}
The_HulkMedlem sedan juni 20031 837 inlägg
#4

Du har fortfarande inte svarat på vad det är som blir fel.
Kan du ge lite mer information om vad som egentligen blir fel?

AsaMedlem sedan dec. 20011 860 inlägg
#5

Bilden beskärs helt fel. Det ser ut som den trycks ihop. Den skall först krympa bilden och sedan klippa ut en storlek på 300 x 200 px ifrån den minaksade bilden.
Testa koden så får ni se själva hur det blir..

codlerMedlem sedan juni 20097 inlägg
#6

Har du sett exempel 2 här:
http://se.php.net/imagecopyresampled

AsaMedlem sedan dec. 20011 860 inlägg
#7

Det blev också fel beskärning när jag ställde på 308x200 px på outputbilden. Verkar som den satte höjden på 308 men inte brydde sig i bredden alls. Den krympte bara ner bilden men med fel värde på fel ställe. Den koden hade fel i sig då den gick efter fel. Ifsatsen visar fel..Sen det viktigaste fanns ej ..: Den klippte ej ut den storleken ifrån bilden...

AsaMedlem sedan dec. 20011 860 inlägg
#8

Jag fick använda funktionen under det postad av: z3n666 at gmail dot com 27-Apr-2009 06:19

Den verkade funka:

<?php
function _ckdir($fn) {
    if (strpos($fn,"/") !== false) {
        $p=substr($fn,0,strrpos($fn,"/"));
        if (!is_dir($p)) {
            _o("Mkdir: ".$p);
            mkdir($p,777,true);
        }
    }
}
function img_resizer($src,$quality,$w,$h,$saveas) {
    /* v2.5 with auto crop */
    $r=1;
    $e=strtolower(substr($src,strrpos($src,".")+1,3));
    if (($e == "jpg") || ($e == "peg")) {
        $OldImage=ImageCreateFromJpeg($src) or $r=0;
    } elseif ($e == "gif") {
        $OldImage=ImageCreateFromGif($src) or $r=0;
    } elseif ($e == "bmp") {
        $OldImage=ImageCreateFromwbmp($src) or $r=0;
    } elseif ($e == "png") {
        $OldImage=ImageCreateFromPng($src) or $r=0;
    } else {
        _o("Not a Valid Image! (".$e.") -- ".$src);$r=0;
    }
    if ($r) {
        list($width,$height)=getimagesize($src);
        // check if ratios match
        $_ratio=array($width/$height,$w/$h);
        if ($_ratio[0] != $_ratio[1]) { // crop image

            // find the right scale to use
            $_scale=min((float)($width/$w),(float)($height/$h));

            // coords to crop
            $cropX=(float)($width-($_scale*$w));
            $cropY=(float)($height-($_scale*$h));   
           
            // cropped image size
            $cropW=(float)($width-$cropX);
            $cropH=(float)($height-$cropY);
           
            $crop=ImageCreateTrueColor($cropW,$cropH);
            // crop the middle part of the image to fit proportions
            ImageCopy(
                $crop,
                $OldImage,
                0,
                0,
                (int)($cropX/2),
                (int)($cropY/2),
                $cropW,
                $cropH
            );
        }
       
        // do the thumbnail
        $NewThumb=ImageCreateTrueColor($w,$h);
        if (isset($crop)) { // been cropped
            ImageCopyResampled(
                $NewThumb,
                $crop,
                0,
                0,
                0,
                0,
                $w,
                $h,
                $cropW,
                $cropH
            );
            ImageDestroy($crop);
        } else { // ratio match, regular resize
            ImageCopyResampled(
                $NewThumb,
                $OldImage,
                0,
                0,
                0,
                0,
                $w,
                $h,
                $width,
                $height
            );
        }
        _ckdir($saveas);
        ImageJpeg($NewThumb,$saveas,$quality);
        ImageDestroy($NewThumb);
        ImageDestroy($OldImage);
    }
    return $r;
} 
img_resizer("36-030_684.jpg",100,308,200,"36-030_684_NYTT.jpg")
?>
134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)