61

Grafika是一个PHP图像处理库,是基于Imagick和GD,可以用于改变图片大小,剪裁,比较,添加水印等等功能。还有感知哈希,高级图像过滤,绘制贝塞尔曲线等功能,可谓非常强大。

由于功能太多,所以分成几篇文章写。

《1、图像基本处理》
《2、图像特效处理模块》
《3、图像属性处理》
《4、图形绘制》

优点:

  • 缩略图的速度非常快,质量非常高
  • 支持智能剪裁
  • 很好的支持GIF图片
  • 5种缩略图模式
  • 图像对比功能
  • 图像高级过滤功能
  • 图像混合
  • 其他图像处理库支持的API基本都支持

安装

下载

1、直接下载:

Grafika的官网Github地址

2、composer

    composer require kosinix/grafika:dev-master --prefer-dist

环境需求

  • PHP >= 5.3,当然官方推荐php7
  • GD库 >= 2.0版本
  • Imagick最好(不强求)>=3.3.0 , ImageMagick >= 6.5.3

部署

下载下来的Grafika目录基本结构像下面这样:

Grafika目录基本结构

不过composer下载下来的多一点儿,你只需要使用kosinix/grafika目录下的东西就好了。

我们在grafika目录下建立一个index.php,之后的操作都在这里。

grafika给我们提供了一个非常好用的autoloader.php位于src目录下。

index.php中引入它,(说明下,以下示例都需要引入这个autoloader.php文件,我们默认省略),下面就可以直接开发了。

require_once 'src/autoloader.php';

创建Editors

1、createEditor

grafika通过静态方法createEditor来创建一个editor。它包含所有的图片处理方法。

由于,grafika是基于ImagickGD库,所以使用createEditor方法会根据当前情况,自动选择所需要的图片处理库。(推荐使用)

use Grafika\Grafika; // Import package
$editor = Grafika::createEditor(); // Create the best available editor

2、Imagick Editor

当然你也可以直接使用Imagick类库。

use Grafika\Imagick\Editor; // Import package
$editor = new Editor(); // Imagick editor

注意:有些情况可能不支持该类库,你需要使用下面语句检查后使用,(不过你最好直接使用方法1,就没这些事)

use Grafika\Imagick\Editor; // Import package
$editor = new Editor(); // Imagick editor
if( $editor->isAvailable() ) { // Safety check

    // Your code here

}

3、GD Editor

你也可以直接使用GD库,也有些情况可能不支持,记得检查

use Grafika\Gd\Editor; // Import package
$editor = new Editor(); // Gd editor
if( $editor->isAvailable() ) { // Safety check

    // Your code here

}

创建图像

grafika允许你使用4种方式创建一个待处理的图像

1、直接打开图像

创建editor + open方法

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open( $image, 'path/to/image.jpg');

2、使用静态方法打开图片

使用直接打开、创建图片

use Grafika\Grafika;
$image = Grafika::createImage('path/to/image.jpg');

// 这里省略了$editor = Grafika::createEditor();

3、创建一个空白的画布

新建一个画布作为新图像

use Grafika\Grafika;
$image = Grafika::createBlankImage(100,100);

4、从已有图片拷贝一个

拷贝一个图像作为图像处理

$copy = clone $image;

这种方法你要保证之前有一张图片

这几种方法之后的操作大同小异,我们只选择第一种常规方法作为讲解示例

图片缩略图

我们先准备一个原图

图片描述

接下来,假设我们要创建的缩略图长:200px宽200px

1、Resize Fit

等比例缩放类型。那么就保证图片较长的一边不超过200px,等比缩放,缩放后不填充背景

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open($image1 , 'yanying.jpg'); // 打开yanying.jpg并且存放到$image1
$editor->resizeFit($image1 , 200 , 200);
$editor->save($image1 , 'yanying1.jpg');

$editor->open($image2 , 'yanying-h.jpg'); // 打开yanying.jpg并且存放到$image2
$editor->resizeFit($image2 , 200 , 200);
$editor->save($image2 , 'yanying2.jpg');

当然不要忘了第一行的require

图片描述图片描述

2、Resize Exact

固定尺寸缩放类型。就是不管图片长宽比,全部缩小到200px,可能导致图片变形。

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open($image1 , 'yanying.jpg'); // 打开yanying.jpg并且存放到$image1
$editor->resizeExact($image1 , 200 , 200);
$editor->save($image1 , 'yanying1.jpg');

$editor->open($image2 , 'yanying-h.jpg'); // 打开yanying.jpg并且存放到$image2
$editor->resizeExact($image2 , 200 , 200);
$editor->save($image2 , 'yanying2.jpg');

图片描述图片描述

3、Resize Fill

居中剪裁。就是把较短的变缩放到200px,然后将长边的大于200px的部分居中剪裁掉,图片不会变形。

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open($image1 , 'yanying.jpg'); // 打开yanying.jpg并且存放到$image1
$editor->resizeFill($image1 , 200,200);
$editor->save($image1 , 'yanying1.jpg');

$editor->open($image2 , 'yanying-h.jpg'); // 打开yanying.jpg并且存放到$image2
$editor->resizeFill($image2 , 200,200);
$editor->save($image2 , 'yanying2.jpg');

图片描述图片描述

4、Resize Exact Width

等宽缩放。和第一种功能相似,最终宽为200px,等比缩放,高度不管。

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open($image1 , 'yanying.jpg'); // 打开yanying.jpg并且存放到$image1
$editor->resizeExactWidth($image1 , 200);
$editor->save($image1 , 'yanying1.jpg');

$editor->open($image2 , 'yanying-h.jpg'); // 打开yanying.jpg并且存放到$image2
$editor->resizeExactWidth($image2 , 200);
$editor->save($image2 , 'yanying2.jpg');

图片描述

图片描述

5、Resize Exact Height

等高缩放。最终高为200px,等比缩放,不考虑图片宽度。

图片描述图片描述

图像对比功能

1、图片相似度对比

我们首先准备一张基本图,用来和其他图片对比。(segmentfault网页图片可能处理过,直接使用本文图片可能结果不一致)

图片描述

1、我们第一次使用一张灰度图片来比较

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();
$result = $editor->compare('yanying.jpg' , 'yanying_grey.jpg');
var_dump($result); // int 2

说明: grafika图片对比方法compare返回一个数字,其中如果数字越接近于0,那么表示图片越相似。如果数字在0-10范围内,那么图片都可能相似。但是如果数字大于10,那么,可能就完全不同。

这里返回2,说明相似度还是非常高的。

2、我们再用一张缩小的图片来测试,记住都是和第一张基本图比较。

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();
$result = $editor->compare('yanying.jpg' , 'yanying-smaller.jpg');
var_dump($result); // int 0

这里结果返回0,相似度非常高。

3、我们再用一张剪裁下来的局部图片测试

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();
$result = $editor->compare('yanying.jpg' , 'yanying-half.jpg');
var_dump($result); // int 20

结果超过10了,相似度不怎么高

4、我们再用一张完全不同的图片测试

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();
$result = $editor->compare('yanying.jpg' , 'yanying-h.jpg');
var_dump($result); // int 39

结果39,越来越大,越来越不像

2、比较图片是否相同

grafika提供方法equal来检查两张图片是否完全相同。这里的检查是一个像素一个像素的检测,所以时间可能会较长。

当然grafika也会预检查,如果两张图片大小不相同,则直接返回false。只有其他都相同后才会进行逐像素检查。

我们这里对比之前创建的一张缩略图,因为大小不一致,所以直接返回false

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();
$result = $editor->equal('yanying.jpg' , 'yanying-smaller.jpg');
var_dump($result); // boolean false

智能剪裁

智能剪裁是自动识别图像中的重要部分,剪裁时候偏向于保留重点部分。

不过grafika也提供了人为操控位置剪裁,我们先说这个。

基本位置剪裁

基本位置剪裁包含9个位置

  • top-left
  • top-center
  • top-right
  • center-left
  • center
  • center-right
  • bottom-left
  • bottom-center
  • bottom-right

我们这里一起说了,这里我们使用900*600的图片,分成9块

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();

$src = 'yanying.jpg';
$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'top-left' );
$editor->save( $image, 'result1.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'top-center' );
$editor->save( $image, 'result2.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'top-right' );
$editor->save( $image, 'result3.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'center-left' );
$editor->save( $image, 'result4.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'center' );
$editor->save( $image, 'result5.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'center-right' );
$editor->save( $image, 'result6.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'bottom-left' );
$editor->save( $image, 'result7.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'bottom-center' );
$editor->save( $image, 'result8.jpg' );
$editor->free( $image );

$editor->open( $image, $src );
$editor->crop( $image, 300, 200, 'bottom-right' );
$editor->save( $image, 'result9.jpg' );
$editor->free( $image );

看下结果

图片描述

智能剪裁

原图

图片描述

我们使用智能剪裁将图片剪裁至200*200px

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open( $image, 'yanying-smaller.jpg' );
$editor->crop( $image, 200, 200, 'smart' );
$editor->save( $image, 'yanying-smart.jpg' );

发现还是可以突出重点的

图片描述

GIF缩略图

压缩GIF,不丢失动画

grafika可以直接压缩GIF图片,并且不丢失动画功能。

图片描述

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open( $image, 'sample.gif' );
$editor->resizeFit( $image, 250, 128 );
$editor->save( $image, 'output.gif' );

我们这里将原图压缩到原来的一半,发现动画并没有丢失

图片描述

移除GIF动画效果

当然,如果有需要,我们也可以直接移除GIF的动画效果

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open( $image, 'sample.gif' );
$editor->flatten( $image );
$editor->save( $image, 'output-no-animation.gif' );

图片描述

图片合并

图片合并需要2张图片,将其中一张作为基本图,准备的第二章图片就是放置在基础图片之上。

我们首先来看代码

use Grafika\Grafika;
$editor = Grafika::createEditor();
$editor->open($image1 , 'yanying-h.jpg');
$editor->open($image2 , 'yanying-smaller.jpg');
$editor->blend ( $image1, $image2 , 'normal', 0.9, 'center');
$editor->save($image1,'333/yanying-blend.jpg');

解释一下

首先打开两张图片,其中$image1为基础图片,也就是放在下面的。重点在blend这个方法。

其中

  • 第一个参数为基础图片
  • 第二个参数为放置在基础图片之上的图片normal, multiply, overlay or screen.,这里的类型意思就是图片叠加的模式,下面会给出实例看每种的不同。
  • 第三个参数为透明度,这个不说太多,容易想到。
  • 第四个为位置,有10个选择,其中,前面9种为用户自定义拜访位置,而最后一个是智能拜访,由grafika来判断摆放在哪里好。 top-left, top-center, top-right, center-left, center, center-right, bottom-left, bottom-center, bottom-right and smart
  • 第五个参数为可选参数,表示图片2距离图片1左边的距离
  • 第六个参数也为可选参数,表示图片2距离图片1上边的距离

我们试着摆几种情况。

1、normal

其中位置信息:center,透明度为0.9,也就是上面代码的那种

图片描述

2、multiply

位置信息:,top-left,其他不变

图片描述

3、overlay

位置信息:bottom-right,其他不变

图片描述

4、screen

位置信息:,最后一个位置参数不给,也就是默认top-left

图片描述

图像旋转

图像旋转比较简单,只需要给一个旋转角度参数就可以了,如果想要给背景填充个颜色,再给一个颜色参数即可。(默认不给背景色为黑色)

代码如下

use Grafika\Grafika;
use Grafika\Color;
$editor = Grafika::createEditor();
$editor->open($image , 'yanying-smaller.jpg');
$editor->rotate($image ,'45',new Color('#ff0000'));
$editor->save($image,'333/yanying-rotate.jpg');

最后一个背景颜色参数也是需要Color对象

图片描述

图片写文字

在图片上面写文字的参数比较多,不过如果正常使用,只需要给前两个必填的即可,后面的参数都是可选的。

我们逐一的来看各个参数

  • image:所需要写文字的图片
  • text:需要写的文字
  • size:(选填)字体大小,默认为12px
  • x:(选填)文字的最左边距离图片最左边的距离,默认为0
  • y:(选填)文字的基线到图片的最上边的距离,默认是12px,也就是文字的高度。(基线你就当做文字最下面好了)
  • color:(选填)字体颜色,Color对象,需要new Color一下,默认为黑色。
  • font:(选填)字体的完整路径,默认Sans font.
  • angle:(选填)文字旋转角度,取值范围为0-359,默认为0,也就是不旋转

我们随便找个文字试试

use Grafika\Grafika;
use Grafika\Color;
$editor = Grafika::createEditor();
$editor->open($image , 'yanying-smaller.jpg');
$editor->text($image ,'yanying',30,200,100,new Color("#000000"),'',45);
$editor->save($image,'333/yanying-text.jpg');

看下效果。这里说明下,如果文字为中文,需要找一个支持中文的字体。默认字体不支持中文,所以你写中文,就是都是小方框。

图片描述


严颖,PHP研发工程师

2016-11-07日晚

博客:segmentfault主页

推荐一个我们团队自己开发的针对开发者的网址导航:笔点导航 - 用心做最简洁的网址导航

可以自定义网址
可以自定义分类
分类可以标记颜色
自定义皮肤
自定义搜索
网址拖拽排序
自定义插件小模块

图片描述


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

70 条评论
victoryforyou · 2016-11-11

简单易用方便 功能还这么强大 就你了!

回复

火端 · 2017-01-11

这教程写得好,一目了然

回复

redream · 2017-02-26

请教一下,处理文字换行上有没有什么鲁棒的解决方案?

回复

0

你说的是这篇文章里面的哪一个情况?

星空幻颖 作者 · 2017-02-26
0

@星空幻颖 不是文章里面的情况,文章已经写的非常棒了。是我实际遇到的一个问题,需要在图片上写大段文字,但是换行就只能自己根据文字长度来截断换行,不仅不优雅,而且文字右边也不能很好对齐,还有就是中英文字符宽度也不一样,单词还会被从中间截断。很久没写php了,所以请教一下你有没有遇到类似情况,有什么好的解决方案吗?

redream · 2017-02-26
1

@redream 这个里面一般还真的很少遇到过,平时的话也就是加水印,很少遇到换行的。不过不知道使用\n换行有没有效果,你可以试试。(使用\n换行字符串要在双引号内)

星空幻颖 作者 · 2017-02-26
redream · 2017-02-27

再请教一下楼主,Grafika::createBlankImage()创建的图片是黑色的,我想要透明的图片,$editor->opacity ( $image, 0.0 )这个函数也不管用,图片格式是png。

回复

0

createBlankImage函数创建的默认是黑色图片,背后调用的是imagecreatetruecolor,原生php创建图像后,应该是用imagecolorAllocate进行背景色填充,然后这个库好像没有提供这个功能,如果需要,你可以创建完了,然后用php原生的填色

星空幻颖 作者 · 2017-02-27
redream · 2017-02-27

我查api找到了这函数$transparent=new Color("#000000");

$transparent->setAlpha(0);然后就解决啦~新手上路,开发起来好慢哈哈

回复

0

哈哈,学习了这个方法。慢慢开,不过还在进步~

星空幻颖 作者 · 2017-02-27
0

在Editor加上这个就行了

   $color=imagecolorallocatealpha($canvas , 0 , 0 , 0 ,127);//拾取一个完全透明的颜色
    imagealphablending($canvas ,false);//关闭混合模式,以便透明颜色能覆盖原画布
    imagefill($canvas , 0 , 0, $color);//填充
    imagesavealpha($canvas ,true);//设置保存PNG时保留透明通道信息
神仙级手机控 · 2017-04-18
斗兵 · 2017-03-28

图片写文字的时候文字有背景色(每个字后面有一个白色的背景色)是什么原因,应该怎么解决

回复

0

大概是什么样子啊?我这里没有出现过这个情况。

星空幻颖 作者 · 2017-03-28
0

就是每个文字下面都加了阴影一样,不过是白色的背景色

斗兵 · 2017-03-28
0

@星空幻颖 我的头像就是我生成的,你可以看下

斗兵 · 2017-03-28
redream · 2017-05-01

请教一下,如果我想从指定坐标位置为原点,裁剪指定大小的一个矩形怎么裁剪呢?上面的方案无法解决,在(30,50)位置裁剪一个w=200,h=100的矩形的问题

回复

0

其中那个crop方法还有两个参数没写,那个就是坐标,而且你可以定义坐标位置。比如$editor->crop($img_obj,$w , $h , 'top-left' , $x , $y);就是左上角x,y坐标剪裁w,h的矩形。

星空幻颖 作者 · 2017-05-01
0

@星空幻颖 好的,谢谢~

redream · 2017-05-03
0

@redream 不客气^_^

星空幻颖 作者 · 2017-05-04
puresox · 2017-05-09

请教一下,能剪一个圆出来吗?

回复

0

不知道有没有这个功能,没做个这个操作。为嘛要圆形?

星空幻颖 作者 · 2017-05-10
0

客户需求是圆形,但是网上找不到很好的解决方案,痛苦。。。

puresox · 2017-05-10
0

@puresox 是显示是圆形?这个可以直接在前端做成圆形的。

星空幻颖 作者 · 2017-05-10
奇墨 · 2017-07-05

很好很强大

回复

奇墨 · 2017-07-11

图片合并哪里
第五个参数为可选参数,表示图片2距离图片1左边的距离
第六个参数也为可选参数,表示图片2距离图片1上边的距离
这个该怎么使用啊,用了半天还是摸不着边

回复

1
$editor->open($image1 , './img/333/background.png');
    $editor->open($image2 , $src);
    $editor->blend ( $image1, $image2 , 'normal', 1, 'top-left',100,200);
    $editor->save($image1,$src);

这样应该没啥问题

星空幻颖 作者 · 2017-07-12
0

@星空幻颖 嗯嗯,昨天写的值太小,看不出效果,后来值写大了就OK了,谢谢你呢

奇墨 · 2017-07-12
1

@奇墨 不客气^_^

星空幻颖 作者 · 2017-07-12
nbsp001 · 2017-07-19

现在出现一个bug在处理图片时,原图的路径是192.168.12.41:8000/img/cup.jpg,说不存在,但实际中是存在的,求解

回复

0

你这个图片是存在本地?你可以使用file_exists检测一下,浏览器能访问的路径,不一定适合php。如果是当前目录,记得带上./。比如./image/xxx.jpg

星空幻颖 作者 · 2017-07-21
浮华 · 2017-08-03

不改变图片尺寸的前提下,直接保存png格式图片尺寸反而变大了,求解?

回复

0

一般来说png会比jpg大,因为压缩格式不一样

星空幻颖 作者 · 2017-08-05
codes · 2017-08-09

我想文字在图片居中,怎么获得输出的文本宽度来计算x、y

回复

0

这个涉及到网页字体的理论,12px的字体在页面上一般高为12px。具体可以参见这篇文章:https://www.w3cplus.com/css/c...

星空幻颖 作者 · 2017-08-09
esCape · 2017-09-12

请教一下,我做图片旋转,$editor->rotate($image ,'45',new Color('#ff0000'),0);PNG的图片旋转之后最后旋转出来会带纯色背景,如何才能透明背景呢?我的Color类new的时候给了alpha值是0,其他值也都试过,没反应。

回复

amorZhu · 2017-09-18

请教一个问题,图片合并后,图片大小会被压缩,图片也没有之前清晰了,就是将质量改为100,图片大小也会被压缩1/2,请问图片压缩后,怎样才能保证图片不会被压缩。

回复

0

这个问题我终于明白了,但我不说。。。因为这是个常识性问题。

amorZhu · 2017-09-18
0

@amorZhu 哈哈哈,刚刚看到,解决了就好~

星空幻颖 作者 · 2017-09-20
白天不懂夜的黑 · 2018-01-24

$editor = Grafika::createEditor();

        $editor->open( $image, $this->_source );
        $editor->resizeExact( $image, $this->_width, $this->_height );
        $editor->save( $image, $this->_dest ,$this->ext,$this->_quality);

这样压缩png格式的图片后 文件反而比源文件还大呢,要怎么处理png格式图片的压缩呢

回复

0

一般就是减小尺寸,或者降低保存质量来减小大小

星空幻颖 作者 · 2018-01-24
leo_wang · 2018-02-12

图片合并blind出现一个问题,下面的一张图片是圆角,周围是透明的,叠加一张图片后变成背景透明变成黑色了

回复

0

你需要修改 editor 里的blend下的源码,把生成颜色改成导入透明PNG 透明PNG自己搞

    $canvas = ImageCreatefrompng( "simgs/png0.png");
    imagesavealpha($canvas,true);
    imagecopy( $canvas, $gd1, 0, 0, 0, 0, $w, $h );

    $type = strtolower( $type );
    if($type==='normal') {
常用昵称 · 2018-05-06
撒旦撒 · 2018-03-22

图片的路径,由于头像是抓取微信用户头像,路径是绝对路径。绝对路径在 open 这个函数 报错了 . 请问该怎么解决 类似 这种 路径图片 http://thirdwx.qlogo.cn/mmope...

回复

0

你需要先用php把远程的图片抓取到本地,微信的很容易就弄到本地了,然后再使用库去处理图片

星空幻颖 作者 · 2018-03-22
蹲地上画圈圈 · 2018-03-29

本地是可以用的,但是到线上保存没有图像下来啊 也没有报错信息 怎么回事啊
$editor->open($image1 , './img/share/share_bg.jpg');//背景图

    $editor->open($image2 , './img/share/qrcode.jpg');//二维码水印图
    // $editor->open($image3 , './img/w1/share_head.jpg');//头部装饰图
    $editor->open($image4 , './img/share/tx.jpg');//头像
    $editor->resizeFit($image4, 250, 128 );
    
    $editor->blend ( $image1, $image2 , 'normal', 1.0,"center",8,300);//水印图片位置大小操作
    // $editor->blend ( $image1, $image3 , 'overlay', 1.0,"top-center",0,0);//水印图片位置大小操作
    $editor->blend ( $image1, $image4 , 'multiply', 1.0,"top-left",50,30);//水印图片位置大小操作


    $editor->text($image1 ,'我是好想睡懒觉',25,185,80,new Color("#e15618"),'');//水印文字位置操作
    $editor->text($image1 ,'邀请您进入我和圈子',25,185,130,new Color("#e15618"),'');//水印文字位置操作
    $editor->text($image1 ,'分享有礼',40,270,360,new Color("#e15618"),'');//水印文字位置操作
    $editor->text($image1 ,'L  O  W  C  O  S  T  C  A  R  I  W  S  U  R  A   C  S  H  Q  R  E   L  S  O  M  A  K  E  M  O  N  E  Y',10,20,216,new Color("#e15618"),'');//水印文字位置操作

    $editor->save($image1,'img/share/yanying-blend.jpg');//输出修改后的图片路径
    
 
    echo 'nono';
    
    $editor->free( $image1 );

回复

蹲地上画圈圈 · 2018-03-30

$editor->open($image4 , $data['headimgurl']); 取了微信服务器那边过来的图片为什么不能用啊 难道不支持吗

回复

0

这个方法不可以直接读取微信的远程图片,你需要使用php的方法抓取,比如curl方法。这个库没有抓取图片的代码~你可以百度php curl抓取图片,很多代码

星空幻颖 作者 · 2018-03-30
0

我在网上找得cutl 方式都用不了啊 下载下来的图片都无效的 啥搞

蹲地上画圈圈 · 2018-03-30
0

@蹲地上画圈圈 微信图片没有后缀名,保存的时候需要注意,我这里有个Yii2框架的示例代码,你可以看下,我放在sf的笔记里面了,https://segmentfault.com/n/13...

星空幻颖 作者 · 2018-04-03
载入中...