私のプロジェクトには CodeIgniter の画像クロッパーがあり、picresize.comのように画像をトリミングします (私はjCropを使用しています)。以下に示すバニラコードでうまく機能します。
<?php
$save_to = $this->config->item('images_gallery_thumb_folder').$data['photo_image'];
$targ_w = $this->config->item('gallery_thumb_width');
$targ_h = $this->config->item('gallery_thumb_height');
$src = $this->config->item('images_gallery_folder').$data['photo_image'];
$types = array(1 => 'gif', 'jpeg', 'png');
list($width,$height,$type) = getimagesize($src);
switch ($types[$type]) {
case 'jpeg':
$img_r = imagecreatefromjpeg($src);
break;
case 'gif':
$img_r = imagecreatefromgif($src);
break;
case 'png':
$img_r = imagecreatefrompng($src);
break;
default:
$img_r = imagecreatefromjpeg($src);
break;
}
$dst_r = ImageCreateTrueColor($targ_w,$targ_h );
imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
$targ_w,$targ_h,$_POST['w'],$_POST['h']);
switch ($types[$type]) {
case 'jpeg':
imagejpeg($dst_r, $save_to, 90); //90 = jpeg quality
break;
case 'gif':
imagegif($dst_r, $save_to);
break;
case 'png':
imagepng($dst_r, $save_to);
break;
default:
imagejpeg($dst_r, $save_to, 90); //90 = jpeg quality
break;
}
imagedestroy($dst_r);
?>
しかし、私はこれを CodeIgniter の方法でやりたいと思っています。
これは私がこれまでに思いついたものです:
<?php
$img_config = array(
'source_image' => $src,
'new_image' => $save_to,
'maintain_ratio' => false,
'width' => $targ_w,
'height' => $targ_h,
'x_axis' => $_POST['x'],
'y_axis' => $_POST['y']
);
$this->load->library('image_lib',$img_config);
//$this->image_lib->resize();
$this->image_lib->crop();
?>
問題は、位置からトリミングされますが、サイズが変更されないことです (より大きなトリミング スクエアを設定したと考えてください)。指定された位置からのみトリミングします。
プロジェクトでimage_mooライブラリも使用していますが、それも成功しませんでした。
編集: Image_mooで、これまでに思いついたコードは次のとおりです。
$this->image_moo
->load($src)
->crop($_POST['x'],$_POST['y'],($_POST['x']+$_POST['w']),($_POST['y']+$_POST['h']))
->resize($targ_w,$targ_h)
->save($save_to,true);
問題は、サイズ変更パラメーターを使用すると、トリミング ラインが完全に無視され、画像全体のサイズが変更されることです。前にサイズを変更し、後でクロップを呼び出すと、失敗します。image_moo 呼び出しを 2 回使用することで解決できますが、これは好ましくありません。
これも機能しません:
$this->image_moo
->load($src)
->crop($_POST['x'],$_POST['y'],($_POST['x']+$_POST['w']),($_POST['y']+$_POST['h']))
//->resize($targ_w,$targ_h)
->save($save_to,true)
->resize($targ_w,$targ_h)
->save($save_to,true);
例: このように動作します:
$this->image_moo
->load($src)
->crop($_POST['x'],$_POST['y'],($_POST['x']+$_POST['w']),($_POST['y']+$_POST['h']))
//->resize($targ_w,$targ_h)
->save($save_to,true);
$this->image_moo
->load($save_to)
->resize($targ_w,$targ_h)
->save($save_to,true);
では、image_moo または CI image_lib を 1 回呼び出して、CodeIgniter (または image_moo) の方法で指定された x/y オフセットでサイズ変更 + クロップするにはどうすればよいですか?
おそらく、なぜ私がそれを 2 回呼び出すことを懸念しているのかと尋ねているはずです。うーん、PQが重要で、2回呼び出すと画質が落ちてしまうので気になります。
前もって感謝します、