1

画像の一部を使用して画像をトリミングしようとしていますが、その周りに「余分な」スペースを追加することもできます。ただし、トリミングされた画像が「余分な」スペースに黒いスペースを生成する場合、透明にしたい場合。

クロッパー JavaScript を使用してトリミング座標を取得する: https://fengyuanchen.github.io/cropperjs/

次に、PHP imagecopyresampled を使用して画像をサイズに合わせてトリミングします。

画像のトリミングは問題ありませんが、画像を元のサイズよりも大きくトリミングすると、画像の周りに黒いスペースが追加されるため、これを透明に変更したいと考えています。

トリミングされた画像で黒いピクセルを検索して透明に変換することを検討しましたが、画像に黒が含まれているとこの考えは壊れます

 Current php code: (asuming file type is PNG)

 //$cropData 
 //is an array of data passed through from the cropper containing the original width and height, new width and height and the cropping x and y coordinates.

 //passed in image to be cropped
 $current_image = "/folder/example.jpg";

 //image file location of cropped image
 $image_name = "/folder/cropped_example.jpg";


 //create blank image of desired crop size
 $width = $cropData["width"];
 $height = $cropData["height"];
 $background = imagecreatetruecolor($width, $height);

 //crop coordinates
 $crop_x = $cropData["x"];
 $crop_y = $cropData["y"];

 //create resouce image of current image to be cropped
 $image = imagecreatefrompng($current_image);

 //crop image
 imagecopyresampled($background, $image, 0, 0, $crop_x, $crop_y, $width, $height, $width, $height)){


 imagepng($background, $image_name);


 //File Uploaded... return to page
4

1 に答える 1

0
  1. trueまず、に渡してアルファチャンネルを有効にする必要がありますimagesavealpha
  2. 次のステップは、アルファブレンディングを無効にするfalseことimagealphablendingです。そうしないと、アルファチャンネルが色の再計算に使用され、その値が失われます。
  3. アルファ値として 127 を渡す透明色を割り当てますimagecolorallocatealpha
  4. ソース画像の背景をこの色で塗りつぶします (例: を呼び出しimagefilledrectangleます) 。
  5. imagecopyresampled 画像の実際のサイズを超えないようにソースの幅と高さのパラメーターを渡す場合、それ以外の場合、境界外の領域は不透明な黒と見なされます。

例:

 $background = imagecreatetruecolor($width, $height);

 //crop coordinates
 $crop_x = 10;
 $crop_y = 10;

 imagesavealpha($background, true); // alpha chanel will be preserved
 imagealphablending($background, false); // disable blending operations
 $transparent_color = imagecolorallocatealpha($background, 0, 0, 0, 127); // allocate transparent
 imagefilledrectangle($background, 0, 0, $width, $height, $transparent_color); // fill background

 //create resouce image of current image to be cropped
 $image = imagecreatefrompng($current_image);

 // Limit source sizes;
 $minw = min($width, imagesx($image));
 $minh = min($height, imagesy($image));

 //crop image
 imagecopyresampled($background, $image, 0, 0, $crop_x, $crop_y, $minw, $minh, $minw, $minh);

 imagepng($background, $image_name);
 // done!
于 2019-07-23T12:42:47.960 に答える