首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP GD:如何以二进制字符串的形式获取imagedata?

PHP GD:如何以二进制字符串的形式获取imagedata?
EN

Stack Overflow用户
提问于 2009-07-30 14:17:24
回答 3查看 23.1K关注 0票数 33

我正在使用一个解决方案,将图像文件组装成zip文件,并将其流式传输到browser/Flex应用程序。(保罗·邓肯的ZipStream,http://pablotron.org/software/zipstream-php/)。

只需加载图像文件并对其进行压缩即可。以下是压缩文件的核心:

代码语言:javascript
复制
// Reading the file and converting to string data
$stringdata = file_get_contents($imagefile);

// Compressing the string data
$zdata = gzdeflate($stringdata );

我的问题是,我想在压缩之前使用GD处理图像。因此,我需要一个将图像数据(imagecreatefrompng)转换为字符串数据格式的解决方案:

代码语言:javascript
复制
// Reading the file as GD image data
$imagedata = imagecreatefrompng($imagefile);
// Do some GD processing: Adding watermarks etc. No problem here...

// HOW TO DO THIS??? 
// convert the $imagedata to $stringdata - PROBLEM!

// Compressing the string data
$zdata = gzdeflate($stringdata );

有什么线索吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-30 14:22:07

一种方法是告诉GD输出图像,然后使用PHP缓冲将其捕获为字符串:

代码语言:javascript
复制
$imagedata = imagecreatefrompng($imagefile);
ob_start();
imagepng($imagedata);
$stringdata = ob_get_contents(); // read from buffer
ob_end_clean(); // delete buffer
$zdata = gzdeflate($stringdata);
票数 49
EN

Stack Overflow用户

发布于 2013-04-10 02:20:51

代码语言:javascript
复制
// ob_clean(); // optional
ob_start();
imagepng($imagedata);
$image = ob_get_clean();
票数 19
EN

Stack Overflow用户

发布于 2019-12-30 10:36:38

当不需要输出缓冲区时,可以使用php://内存流。https://www.php.net/manual/en/wrappers.php.php

代码语言:javascript
复制
$imagedata = imagecreatefrompng($imagefile);

// processing

$stream = fopen('php://memory','r+');
imagepng($imagedata,$stream);
rewind($stream);
$stringdata = stream_get_contents($stream);

// Compressing the string data
$zdata = gzdeflate($stringdata );
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1206884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档