1

ソース画像を取得し、ユーザーの選択に基づいてトリミングしようとしています。ただし、常に黒い空のスペースが残ります。これは、間違った順序で使用しているパラメーターと関係があると思います。imagecopyresampled()のphpドキュメントを見た後、私はまだこれを機能させる方法が不足しています。

これが私が持っているものです。この例ではハードコードされた値を使用しましたが、各$targ_変数は画像ごとに異なります。

$targ_w = 183;      // width of cropped selection
$targ_h = 140;      // height of cropped selection
$targ_x = 79;           // x-coordinate of cropped selection
$targ_y = 59;           // y-coordinate of cropped selection
$targ_x2 = 263;         // x-coordinate of 2nd point (end of selection)
$targ_y2 = 199;     // y-coordinate of 2nd point (end of selection)

$src = '/uploads/test.png';
$img_r = imagecreatefrompng($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

imagecopyresampled($dst_r,$img_r,0,0,$targ_x,$targ_y,$targ_x2,$targ_y2,$targ_w,$targ_h);

$newFileName = '/uploads/test2.png';
imagepng($dst_r, $newFileName, 9);
4

2 に答える 2

3

おそらく、それはあなたが作物領域の寸法を正しく計算しなかったという理由だけです。それに加えて、寸法を使用する必要がある座標を使用します。パラメータ7と8を比較します。これは透明性を維持しないことに注意してください。

<?php
$targ_x1 = 59;      // x-coordinate of cropped selection
$targ_y1 = 69;      // y-coordinate of cropped selection
$targ_x2 = 160;     // x-coordinate of 2nd point (end of selection)
$targ_y2 = 82;      // y-coordinate of 2nd point (end of selection)

//1st: dynamically calculate the dimensions
$crop_area_width = $targ_x2-$targ_x1;      // width of cropped selection
$crop_area_height = $targ_y2-$targ_y1;      // height of cropped selection

$image_path = 'http://cdn.sstatic.net/stackoverflow/img/sprites.png';
$src_img = imagecreatefrompng($image_path);
$dst_img = imagecreatetruecolor($crop_area_width, $crop_area_height);

//2nd: cropping does not change scale so source and target dimensions are the same
imagecopyresampled( $dst_img, $src_img, 0, 0, $targ_x1, $targ_y1, $crop_area_width, $crop_area_height, $crop_area_width, $crop_area_height);

header('Content-Type: image/png');
imagepng($dst_img);
?>
于 2012-08-28T21:52:53.483 に答える
0

以下のURLを参照してください:-

PHPでfopenを使用せずにimagecopyresampled()を使用して画像をトリミングする

これを試して:-

<?php

function load_file_from_url($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $str = curl_exec($curl);
    curl_close($curl);
    return $str;
}

class cropImage{
 var $imgSrc,$myImage,$thumb;
 function setImage($image) {
       //Your Image
         $this->imgSrc = $image; 

       //create image from the jpeg
         $this->myImage = imagecreatefromstring($this->imgSrc) or die("Error: Cannot find image!");
         $this->thumb = imagecreatetruecolor(200, 112);

        //imagecopyresampled($this->thumb, $this->myImage, 0, 0, 0, 45, 200, 112, 480, 270);
         imagecopy($this->thumb, $this->myImage, 0, 0, 0, 45, 200, 112, 480, 270); 
    }
    function renderImage()
    {                            
         header('Content-type: image/jpeg');
         imagejpeg($this->thumb);
         imagedestroy($this->thumb); 
         //imagejpeg($this->myImage);
         //imagedestroy($this->myImage); 
    }
}  

    $image = new cropImage;
    $image->setImage(load_file_from_url($_GET['src']));
    $image->renderImage();

?>
于 2012-08-28T20:36:54.177 に答える