php gd 如何裁圖水平垂直置中?

发布于 2022-09-07 11:53:09 字数 1610 浏览 11 评论 0

有一個畫布大小是 $plat 600x300

我有先將一張圖片丟入這個畫布的右側 300x300

右側

imagecopyresampled($plat, $xxx, 300, 0, 0, 0, 300, 300, 300, 300);

之後要將使用者圖片丟到左側的 300x300

左側

imagecopyresampled($plat, $src, 0, 0, 0, 0, 300, 300, $new_w, $new_h);

兩個合起來就會是一張 600x300的圖
這沒有問題

問題是~如何處理使用者的圖片?
我要取得用戶上傳的圖的水平垂直置中 300x300的位置
然後再丟到 plat 畫布中

$src_w = imagesx($src);
  $src_h = imagesy($src);

  if( $src_w > $src_h){
      $new_w = $src_h;
      $new_h = $src_h;
  }else{
      $new_w = $src_w;
      $new_h = $src_w;
  }

以上的做法會稍微的水平垂直置中,但還是會有誤差

但是我怎麼找都沒有相關的資源或做法
也有可能是我找錯~
想問問有沒有人有解?

補充
我開了兩個空畫布
clipboard.png

clipboard.png

抓本身寬跟高
clipboard.png

我發現這樣做後,我的畫布會是空白的

clipboard.png

我以為我放錯地方

clipboard.png

但圖片會變這樣

clipboard.png

更新

imagecopyresampled($plat300, $src, 0, 0, 0, 0, 300, 300, $src_w, $src_h);

clipboard.png

我原始的圖片是

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

入怼 2022-09-14 11:53:09

谢邀,为什么不考虑下把用户的完整图片缩小至300300,放到你要合成的图片的左侧呢?如果真的只要图片居中300300的那部分,也很简单。假设用户上传的图的长、宽分别是w,h,你在使用imagecopyresampled函数把用户图片放到你要合成的图上的时候,原图的坐标x,y分别是用(w-300)/2,(h-300)/2即可得到用户上传图片的置中300*300的那块。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文