这两天一个客户的项目涉及BuddyPress中上传png透明头像时候,变成了黑色背景的问题,通过研究和google搜索找到了如下解决方案,原因是WordPress的裁切函数写得不够兼容,有效的代码如下:
function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $destfilename = false ) {
if ( is_numeric( $src_file ) ) // Handle int as attachment ID
$src_file = get_attached_file( $src_file );$src = wp_load_image( $src_file );
if ( !is_resource( $src ))
return $src;$dst = wp_imagecreatetruecolor( $dst_w, $dst_h );
if ( $src_abs ) {
$src_w -= $src_x;
$src_h -= $src_y;
}list($width, $height, $orig_type) = getimagesize( $src_file );
if (function_exists(‘imageantialias’))
imageantialias( $dst, true );imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
imagedestroy( $src ); // Free up memory
// if ( ! $dst_file )
// $dst_file = str_replace( basename( $src_file ), ‘cropped-‘ . basename( $src_file ), $src_file );// convert from full colors to index colors, like original PNG.
if ( IMAGETYPE_PNG == $orig_type && !imageistruecolor( $dst ) )
imagetruecolortopalette( $dst, false, imagecolorstotal( $dst ) );if ( IMAGETYPE_GIF == $orig_type ) {
if ( !imagegif( $dst, $destfilename ) )
return new WP_Error(‘resize_path_invalid’, __( ‘Resize path invalid’ ));
} elseif ( IMAGETYPE_PNG == $orig_type ) {
if ( !imagepng( $dst, $destfilename ) )
return new WP_Error(‘resize_path_invalid’, __( ‘Resize path invalid’ ));
} else {
if ( !imagejpeg( $dst, $destfilename, apply_filters( ‘jpeg_quality’, 90, ‘wp_crop_image’ ) ) )
return new WP_Error(‘resize_path_invalid’, __( ‘Resize path invalid’ ));
}//$dst_file = preg_replace( ‘/\\.[^\\.]+$/’, ‘.jpg’, $dst_file );
//if ( imagejpeg( $dst, $dst_file, apply_filters( ‘jpeg_quality’, 90, ‘wp_crop_image’ ) ) )
// return $dst_file;
// else
// return false;
}