我正在尝试存储用生成的图像imagecreatefrompng()
使用Transients API, 但它只存储一个空字符串(string(0) ""
). 此外,我注意到如果我在imagedestroy( $im )
, 图像已损坏,根本不显示(损坏的图像缩略图)。
我可以用瞬态API在数据库中存储什么?如何存储如上所述的图像?
我正在尝试存储用生成的图像imagecreatefrompng()
使用Transients API, 但它只存储一个空字符串(string(0) ""
). 此外,我注意到如果我在imagedestroy( $im )
, 图像已损坏,根本不显示(损坏的图像缩略图)。
我可以用瞬态API在数据库中存储什么?如何存储如上所述的图像?
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混合混淆,所以简而言之,不应该使用。
我读过here 关于使用动态切换当前wp数据库$wpdb->select(\'database_name\'); 一旦完成,我理解我将不得不向原始数据库发出相同的语句。问题:更改数据库后,我是否需要刷新缓存或类似的东西才能正常工作?我需要再次呼叫WP标头吗?潜在问题?