PHP使用intervention-image实现对图片的加入文字,图片等添加编辑功能.

6 篇文章 0 订阅
4 篇文章 0 订阅

前言:作为一名全栈开发,和图像处理打交道是习以为常,主要是以前端为主.对于前端来说,图像处理都还好说,也比较简单。但对于应用后台,或者接口而言,毕竟主要工作是处理数据的,图像处理方面比较少,但是现在后台处理图片功能,也会越来越多,以下举几个例子:

(1)特定活动海报,(电商app常见)

(2)个人名片(笔者基于此开发功能)

(3)各种各样的分享

所以今天特向 PHP 工程师们推荐一个 Intervention Image 图片处理插件,它提供了一套易于表达的方式来创建、编辑图片。

文档:

注意点:

由于Phalcon的资料较少,笔者自己提供如何在Phalcon中引用intervention-image

(1)引入包:
   composer require intervention/image
 (2)在app/config/service.php 文件里加入:
   $di->setShared('image-manager', function () { 
        return new \Intervention\Image\ImageManager(['driver' => 'gd']); 
   });

最后,贴上实例代码,希望对大家有所作用

 Laravel
    Use Image;
    /**
     * 生成保存集团个性名片-后台例子
     * Intervention/image : http://image.intervention.io/api/text
     * @param int $imageId 图片ID
     * @param string $path 保存路径
     */
    protected function saveBusinessCardTemplateExample($imageId, $path)
    {
        $imageManager = new Image();
        $fontPath = public_path('font/HYXIAOBOMEIYANTIW.TTF');

        $image = $imageManager::make(背景url)->resize(330, 190);
        $face_img = $imageManager::make(头像url)->resize(65, 86);
        $qrcode_img = $imageManager::make(二维码url)->resize(50, 50);
        $phone_img = $imageManager::make(手机符号url)->resize(10, 10);
        $address_img = $imageManager::make(地址符号url)->resize(10, 10);

        // 插入水印(当前管理头像), 水印位置在原图片的右下角, 距离左边距 18 像素, 距离上边距 30 像素
        $image->insert($face_img, 'left-top', 18, 30);
        // 插入水印(微信二维码), 水印位置在原图片的右下角, 距离右边距 21 像素, 距离上边距 120 像素
        $image->insert($qrcode_img, 'right-top', 21,120);
        // 插入水印(手机符号)
        $image->insert($phone_img, 'left-bottom', 100,75);
        // 插入水印(地址符号)
        $image->insert($address_img, 'left-bottom', 100,92);

        // 插入客户经理名称
        $image->text('李白', 100,41, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(13);
            $font->valign('left');
        });
        // 插入客户经理 职称
        $image->text('集团专属客户经理', 100, 59, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 插入客户经理 职称
        $image->text('中国移动通信集团附件有限公司厦门分公司', 100, 77, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 插入客户经理 职称
        $image->text('厦门市莲前西路233号移动通信大楼', 110, 96, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 插入客户经理手机号
        $image->text('18159801628', 108, 114, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 其他文字
        $image->text('▲扫码了解', 254, 188, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->color('#ffffff');
            $font->align('left');
        });
        // 其他文字
        $image->text('为企业提供基础通信、营销管理等', 18, 170, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->color('#ffffff');
            $font->align('left');
        });
        // 其他文字
        $image->text('一站式解决方案', 55, 185, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->color('#ffffff');
            $font->align('left');
        });
        $image->save($path);
    }
phalcon
    /**
     * 保存个性名片
     * Intervention/image使用api文档http://image.intervention.io/
     * @param string $path
     */
    protected function saveBusinessCardTemplate2($imageId, $path)
    {
        // 实例化
        $imageManager = $this->getDI()->get('image-manager');
        // 字体文件
        $fontPath = BASE_PATH . '/public/font/HYXIAOBOMEIYANTIW.TTF';

        $image = $imageManager->make(背景图片url)->resize(330,190);
        $face_img = $imageManager->make(头像图片url)->resize(65, 86);
        $qrcode_img = $imageManager->make(二维码图片url)->resize(50, 50);
        $phone_img = $imageManager->make(手机自豪图url)->resize(10, 10);
        $address_img = $imageManager->make(地址符号图url)->resize(10, 10);

        // 插入水印(当前管理头像), 水印位置在原图片的左上角, 距离左边距18像素, 距离上边距 30 像素
        $image->insert($face_img, 'left-top', 18, 30);
        // 插入水印(微信二维码), 水印位置在原图片的右上角, 距离右边距 21 像素, 距离上边距 120 像素

        $image->insert($qrcode_img, 'right-top', 21,120);
        // 插入水印(手机符号)
        $image->insert($phone_img, 'left-bottom', 100,75);
        // 插入水印(地址符号)
        $image->insert($address_img, 'left-bottom', 100,92);

        // 插入客户经理名称
        $image->text('李白', 100,41, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(13);
            $font->valign('left');
        });
        // 插入客户经理 职称
        $image->text('集团专属客户经理', 100, 59, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 插入客户经理 职称
        $image->text('中国移动通信集团附件有限公司厦门分公司', 100, 77, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 插入客户经理 职称
        $image->text('厦门市莲前西路233号移动通信大楼', 110, 96, function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 插入客户经理手机号
        $image->text('18159801628', 108, 114, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->valign('left');
        });
        // 其他文字
        $image->text('▲扫码了解', 254, 188, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->color('#ffffff');
            $font->align('left');
        });
        // 其他文字
        $image->text('为企业提供基础通信、营销管理等', 18, 170, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->color('#ffffff');
            $font->align('left');
        });
        // 其他文字
        $image->text('一站式解决方案', 55, 185, function ($font) use ($fontPath)  {
            $font->file($fontPath);
            $font->size(12);
            $font->color('#ffffff');
            $font->align('left');
        });
        $image->save($path);
    }

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
首先,你需要在 Laravel 项目中安装 intervention/image 库。可以通过 Composer 命令来安装: ``` composer require intervention/image ``` 安装完成后,你可以在控制器中编写以下代码来实现图片上传功能: ```php use Illuminate\Http\Request; use Intervention\Image\Facades\Image; public function upload(Request $request) { $image = $request->file('image'); $filename = time() . '.' . $image->getClientOriginalExtension(); $path = public_path('uploads/' . $filename); // 裁剪并保存图片 Image::make($image->getRealPath())->resize(200, 200)->save($path); return response()->json(['status' => 'success', 'url' => '/uploads/' . $filename]); } ``` 这段代码做了以下几件事: 1. 从 Request 中获取上传的图片文件; 2. 生成文件名,并保存到 Laravel 项目的 public/uploads 目录下; 3. 使用 intervention/image 库对图片进行裁剪,并保存到指定位置; 4. 返回上传成功的 JSON 响应,包括上传后的图片 URL。 最后,你需要在 Blade 模板中添加表单以及 JavaScript 代码来实现图片上传功能。可以参考以下代码: ```html <form id="upload-form" enctype="multipart/form-data"> <input type="file" name="image" id="image-input"> <button type="submit">上传图片</button> </form> <script> $(function() { $('#upload-form').submit(function(e) { e.preventDefault(); var formData = new FormData($(this)[0]); $.ajax({ url: '/upload', type: 'POST', data: formData, processData: false, contentType: false, success: function(data) { console.log(data); // 处理上传成功后的逻辑 }, error: function(xhr, status, error) { console.error(error); // 处理上传失败后的逻辑 } }); }); }); </script> ``` 这段代码做了以下几件事: 1. 显示一个包含文件上传表单的 HTML 表单; 2. 在表单提交时,使用 jQuery.ajax() 方法发送 POST 请求; 3. 将表单数据封装成 FormData 对象,并设置 processData 和 contentType 选项为 false; 4. 在上传成功时,处理服务器返回的 JSON 响应,例如显示上传的图片

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值