imagecreatefrom*
函数返回图像资源标识符,当转换为字符串(保存选项)时,将导致空string(0) ""
容器
这些函数创建的原始图像没有任何可以立即序列化的特定数据结构。我可以想到两种解决方案:
图像文件使用imagepng
, 例如,获取实际的PNG数据并将其存储。
$image_resource = imagecreatefrompng( ... );
// do GD manipulations
$temp = tempnam( sys_get_temp_dir(), \'image_cache_\' );
imagepng ( $image_resource, $temp );
$image_data = file_get_contents( $temp );
set_transient( \'cached_image\', base64_encode( $image_data ), 3600 );
unlink( $temp );
记住永远
base64_encode
数据,因为WordPress中的选项表
LONGTEXT
键入未准备好二进制的数据字段。
还要注意如何将图像数据缓存在uploads文件夹中,并使用Transients API缓存其图像名称:
$image_resource = imagecreatefrompng( ... );
// do GD manipulations
$upload_dir = wp_upload_dir();
$upload_file = $upload_dir[\'path\'] . \'/\' . $unique_image_name;
imagepng ( $image_resource, $upload_file );
set_transient( \'cached_image\', $upload_file, 3600 );
如果出于某种原因,您需要实际存储原始像素RGBA结构,则需要使用
imagecolorat
然后读取图像的每个像素,创建一个巨大的数组并将其序列化。检索此数据需要重建图像。
这种方法有很高的开销,可能会与颜色分配和alpha混合混淆,所以简而言之,不应该使用。