提问:
目前已经实现了前端显示数组的图片,但返回的图片如图1、2中的单张图片,原先代码如图3中。在原来的10-11行中显示代码如下:
echo "<img src='".$domain."/".$value.".png' />";
//修改前的代码
<?php include_once 'count.php';?>
<?php
$domain = './theme/moebooru'; // 文件目录名
$file_path = 'counter.dat'; // 访问次数存储文件名
$length = 7; // 最大单位为百万 即7位数。可修改
$count = trim(file_get_contents($file_path)); // 读取访问次数
$complete = str_repeat('0' , $length - strlen($count)) . $count; // 自动补全
$imageArray = str_split($complete); // 将字符串分割为字符数组
//$theme = '';
foreach($imageArray as $key => $value){
$imageArray[$key] = $domain . '/' . $value . '.png'; // 将数量对应为图片
echo "<img src='".$domain."/".$value.".png' />";
}
?>
//修改新增
<?php
//1、导入图片,并计算宽高
$img = imagecreatefrompng($imageArray[$key]);
$width = imagesx($img);
$height = imagesy($img);
//2、查看并销毁
header("content-type:image/jpg");
imagepng($img);
imagedestroy($img);
现在想使用 GD库将上面输出的Arry数组 的图片链接 将$img赋值,然后依次拼接并显示到前端。
回答:
感觉你的思路有一些问题,你不能使用GD库返回一个数组,GD是处理图片的,并不能干更多的事情。这种情况的基本思路是先将0-9的图片存储到某个位置,前端展示的时候,每个数字有对应的图片地址。所以按你说的思路是不行的,没有这种说法。
然而我猜测,你的意思是说,并不是直接展示0-9的图片,而是通过使用PHP处理再展示。
方法1:
此时只要这样改就行:
// echo "<img src='".$domain."/".$value.".png' />";
// 把原来的这一行去掉。
// 这样读取图片
echo "<img src='".$domain."/readimg.php?value=".$value."' />";
这样最终的应当html如下:
<img src="/readimg.php?value=1" />
<img src="/readimg.php?value=2" />
<img src="/readimg.php?value=3" />
这样浏览器并不是直接去请求图片,而是请求PHP,在这个PHP中你使用GD加载响应图片,进行处理,然后直接输出到浏览器,就如你新增的那部分代码。但是只需要处理一个图片就行。
以上方法是一个思路更清晰的做法。
那么难道必须使用两个PHP文件吗?我直接将图片输出到页面上不行吗?可以的。但是这种做法在小编看来太复杂了,后面会简单对比一下两种做法。
方法2:
首先,你要遍历数组,处理每一个要处理的图片。然通过下面的方法获取到图片的结果,下面代码中的变量$image_data。
// $img = 要处理的图像资源;
ob_start();// 打开输出控制缓冲
imagepng($img);// 显示PNG图像
$image_data = ob_get_contents();// 返回输出缓冲区的内容
imagedestroy($img);// 释放与 image 关联的内存
ob_end_clean();// 清空(擦除)缓冲区并关闭输出缓冲
然后将图片数据输出到img标签里:
<img src='data:image/$format;base64,$data'>
此时就实现了你说的那种效果,遍历数组,将数组输出到页面上。
小结
这两种方法都是能实现效果,先用PHP处理图片再展示到页面上。
方法1中,PHP并不直接处理图片,而是输出指定的图片,与之前不同的是,并不是直接输出图片地址,而是一个PHP地址,并将图片对应的值通过get参数传进去。浏览器会readimg.php发起请求,并显示readimg.php输出内容,也就是GD库处理的结果。
在方法2中,PHP直接将要处理的图片处理好,并且将图片的结果存储为Base64格式,然后输出到img的src里。
这里面方法1的做法是比较好的,思路更清晰,代码也更简单,也更容易优化性能。一个明显的优点是,并没有在页面中处理图片,不需要等这些图片处理完在展示网页。
这里面你可能缺少几个知识点:
1.浏览器加载图片的流程,我们将一个图片路径写在html中,并没有将图片数据写在里面,只是一个路径,浏览器会去这个路径获取图片。
2.浏览器不会判断这个图片路径是否真的是一个图片路径,这个图片以png结尾和以PHP结尾都没有关系,浏览器都会请求,只要返回的数据是图片数据就能用。
3.html的img的src,支持base64的数据,你可以将图片数据转成base64的数据,直接输出在img的src中,浏览器会把它当做图片处理。
你可能不熟悉以上几个知识点,导致你陷入到了PHP直接输出多个图片的误区中。你没有办法在一个url中输出多个图片。
原文标题:GD库如何合并数组返回的链接图片?
原文地址:https://phpreturn.com/index/a6278746cf3340.html
原文平台:PHP武器库
版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。