【问题标题】:Php, GD and greyscale in a foreach loop [duplicate]foreach循环中的Php,GD和灰度[重复]
【发布时间】:2012-10-12 00:38:43
【问题描述】:

可能重复:
Have GD get image from binary string

我需要能够在 foreach 循环中动态地将图像更改为灰度。

我基本上是从数据库中获取一组图像 url,在我显示它们之前,我需要它们变成灰度,简单地说。

在不实际创建单独的文件作为图像源的情况下是否可行,该文件将处理文件并输出图像标题?

【问题讨论】:

  • 是的,我做了,但大多数示例只是简单的 createimagefromjpeg(或其他 ext)和 imagejpeg(或其他 ext)以及图像标题的使用,这需要单独文件中的 php 脚本。我想避免将这样的文件添加到服务器。或者,换句话说,在我采取进一步措施之前,需要确保这是唯一的方法
  • @xception 我不同意。他不想创建另一个 php 页面。
  • @blue112 再看问题,他说他的问题是他必须创建一个文件作为图像源,这样可以避免通过从数据库中作为字符串传递的 blob 创建图像,除非我误解了什么。
  • @vault-boy 在以下语句中:Is it doable without actually creating a separate file as image source, which would process the file and output image headers? 您的意思是创建一个图像文件作为 gd 对象的源以将它们转换为灰度或一个 php 文件作为将图像提供给的源客户?
  • @vault-boy 你会使用太多系统资源????这样做

标签: php foreach gd grayscale


【解决方案1】:

如果您希望在显示之前处理图像,并且不调用 php 脚本作为图像源,也不将图像另存为新,您可以使用 base64 图像源。

类似:

<img alt="Embedded Image" src="data:image/png;base64,iVBORw0KGgoABBANSUhEUgAAADIA..." />

可以使用图片上的base64_encode来获取base64编码的数据。

$out = base64_encode(imagepng($im));
echo '<img src="data:image/png;base64,'.$out.'" />';

这应该可以解决问题。

【讨论】:

  • 试过了,但我得到的只是源代码中的一堆乱七八糟的字符
【解决方案2】:

如果 css3 可以接受,试试这个:

.grayscale {
    filter: grayscale(100%);
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    -kthml-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
}

class="grayscale" 添加到您的img。这样您仍然可以使用原始图像,但它们将以灰度显示给用户。如果你添加

filter: gray;

至此,它甚至可以在 IE6-9 中工作

在 iframe 上使用类的演示:http://jsfiddle.net/8BDVn/

【讨论】:

  • 我已经玩过css3了。以上不适用于 Firefox
  • 对于 firefox,请查看 demosthenes.info/blog/532/… - 那里有一个 svg 过滤器,您可能需要将该 svg 下载到您的服务器
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2018-05-31
  • 2015-09-21
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多