php如何动态给多张大小不一的图片加一个二维码图片到右下角?

php如何动态给多张大小不一的图片加一个二维码图片?
需求是这样的
我在后台设置一个固定大小的小二维码
clipboard.png

固定大小二维码,动态添加到尺寸不一的图片的右下角,例如
左上左下右上右下都可以哈
图片描述
图片描述
,*
我当然是想添加到自己看着合理的位置,可是是动态的;我想到的笨方法就是给每张图用PS调整到自己觉得合理的位置、我觉得有点不现实哈。*

如果是添加固定xy位置就会这样哈
图片描述

????????????
图片描述

所以,麻烦大神们给个思路吧

这是我的辣鸡代码,大神们怎么改善

<?php
header("content-type:image/jpeg");
mb_internal_encoding("UTF-8");
$name = $_GET['name'];
$im = imagecreatetruecolor(640, 463);
$bg = imagecreatefromjpeg('icon.jpg');
imagecopy($im, $bg, 0, 0, 0, 0, 640, 463);
imagedestroy($bg);
$black = imagecolorallocate($im, 20, 20, 20);
$text = $name;
$fontpath = '../../assets/font/lxk.ttf';
imagettftext($im, 32, 12, 42, 320, $black, $fontpath, $text);
$texta = "Thank you for being";
$textb = "my fan , goodbye ! ";

imagettftext($im, 26, 13, 52, 380, $black, $fontpath, $texta);

imagettftext($im, 26, 13.5, 62, 430, $black, $fontpath, $textb);
imagejpeg($im);
imagedestroy($im);
?>
阅读 5.3k
7 个回答

以前写的,给图片打水印,对应 9个位置,你自己改下

function waterImage($image, $position = 1, $dest, $alpha = 40)
    {
        list($water_width, $water_height) = $this->getImageInfo($image);
        list($image_width, $image_height) = $this->getImageInfo($this->_filename);
        $x = $y = 0;
        switch ($position) {
            case 1:
                $x = 0;
                break;
            case 2:
                $x = ($image_width - $water_width) / 2;
                break;
            case 3:
                $x = ($image_width - $water_width);
                break;
            case 4:
                $y = ($image_height - $water_height) / 2;
                break;
            case 5:
                $x = ($image_width - $water_width) / 2;
                $y = ($image_height - $water_height) / 2;
                break;
            case 6:
                $x = ($image_width - $water_width);
                $y = ($image_height - $water_height) / 2;
                break;
            case 7:
                $y = ($image_height - $water_height);
                break;
            case 8:
                $x = ($image_width - $water_width) / 2;
                $y = ($image_height - $water_height);
                break;
            case 9:
                $x = $image_width - $water_width;
                $y = ($image_height - $water_height);
                break;
        }
        $dest_image = imagecreatefromstring(file_get_contents($image));
//      imagettftext($this->_src_link, $size, $angle, $x, $y, $color, $font_file, $text);
        imagecopymerge($this->_src_link, $dest_image, $x, $y, 0, 0, $water_width, $water_height, $alpha);
        $output = $this->_out_func;
        $suffix = $this->getImageSuffix($this->_filename);
        $filename = $dest . DIRECTORY_SEPARATOR . $this->getUniName() . '.' . $suffix;
        $output($this->_src_link, $filename);
        imagedestroy($this->_src_link);
        return $filename;
    }

gd或者imagick可以获取图片宽高,
然后开始绘制,x坐标计算底图宽度-二维码宽度,y坐标计算底图高度-二维码高度

看你这么做的目的是啥了。
如果只是为了展示二维码,而且二维码有可能变化,那么最好就是两张图,在前端处理放在一起就可以了。
如果是为了打水印之类的效果,那么你可以参考其他答案,可以适当安比例缩放二维码。

数据库中保存图片唯一标识,然后存储图片的需要贴的xy位置。
之后只要调用imagecopy就行了。
或者你可以直接把宽高保存在文件名
filename.width_height.png

根据图片的大小定位二维码的位置

谢谢大家的回答,这个问题,我自己通过网上搜视频教程搞定了。
视频教程和评论区的几位答案基本一样,特别是帖代码那位仁兄。
思路清晰是这位
@xialeistudio
其他几位也是思路哈,可能我笨没懂
案例代码是这几位,基本和我看得视频教程代码思路一致
@tumi
@Ali_
视频教程我就不帖了,避免广告嫌疑哈,真需要私聊谢谢???
?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题