---
title: "CropImage"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/179083-cropimage"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Asa"
published: "2009-06-22T10:40:49.000Z"
updated: "2009-06-22T16:42:55.000Z"
replies: 7
views: 443
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/179083-cropimage"
---

# CropImage

## #1 — Asa, 2009-06-22T10:40Z

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); 
}
```

Permalänk: https://www.webforum.nu/p/179083

## #2 — headbug, 2009-06-22T10:49Z

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 :)

Permalänk: https://www.webforum.nu/p/2191175

## #3 — Asa, 2009-06-22T13:39Z

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); 
}
```

Permalänk: https://www.webforum.nu/p/2191191

## #4 — The_Hulk, 2009-06-22T14:27Z

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

Permalänk: https://www.webforum.nu/p/2191201

## #5 — Asa, 2009-06-22T15:16Z

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..

Permalänk: https://www.webforum.nu/p/2191209

## #6 — codler, 2009-06-22T15:34Z

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

Permalänk: https://www.webforum.nu/p/2191212

## #7 — Asa, 2009-06-22T16:15Z

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...

Permalänk: https://www.webforum.nu/p/2191218

## #8 — Asa, 2009-06-22T16:42Z

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")
?>
```

Permalänk: https://www.webforum.nu/p/2191219

---

Tråden på webben: https://www.webforum.nu/amne/php/179083-cropimage
