wp_generate_attachment_metadata输出文件的内容而不是写入文件
我正在研究一种将图像添加到Wordpress媒体库的窗体,除了在较小的尺寸下创建其他图像之外,所有内容都将变为桃色。输出发生在multi_resize函数的WP_Image_Editor类中,然后是_save函数。对imagetruecolortopalette的呼吁似乎是罪魁祸首。wp_generate_attachment_metadata输出文件的内容而不是写入文件
输出看起来是这样的:
�PNG IHDR��<q� IDATx���w�%�u�����{�}��IA$(QL&iR����)[a%J���^����|����G^�u��ʒ쵨d[�LS��3��D�`��ͼ|�����?���t��$e�m�|���+�:�wN�V�}� ��xB��㝣�k��1�w߽(���O?�k�Kh�1�`��:�W����S�C����MӠ�b0��C)����])�1�=���ֶ�{��Z��c8�Whex��)��S��t�t���x�,�X��b< ����W������D��j��1u]3(G�#��t��4�W�9��0Z�]��#��TUM��ІAiP^����_�JO)�NFC�����(��K�b��[^s+?���GSM�F����(LAU5�|y����-eY��k��(�v���9�����(epΡ�B)0ư���ц�p�1���M������0��T>��S[YE{���#�yE���BkMY�-a���R�%km$��};��`@UU���-�y�c=��꺦i��n'/\�Ok�����X;emu����7.Q�cAԾkO�Hl�j�w��"9����w�=*�XM\���L��a.\�4X[QU�z���q���]Di�x��t:ƹ�\�?c�.�q�� EY�6�Oo��yH�i��8稪 �\�~�:�T{�1&֡0Fǹr4M�2k-�ɔ��(˂rP&��#�� ��n�$ ��e��i®q��%�K��v�����I.^�Ą��Zkq�kz���eپ�1EAQV+EQ��=s �M=��I�6��k�j��F�ё@Q� �^iq�� �K�v���v��]R75�6J��};1F�}�s���¢�����'O�����`LJ�u�������AK(ι����i;MӴ���E���bKp���� ����>�� ~kF�;��E��t�uK�a'��1��`@w�;�L:̕��!/�����>^�IO ��ӮJm��pc-Mc�(EK�iPi����T�>�DY�P�`L���Z�� �J���4
普通WordPress的上传,通过管理或重力形式的调整工作完全正常,但我的函数会导致错误。
require_once(ABSPATH。'wp-admin/includes/image.php');
$upload_overrides = array('test_form' => false);
// http://codex.wordpress.org/Function_Reference/wp_handle_upload
$movefile = wp_handle_upload($_FILES['image'], $upload_overrides);
if ($movefile) {
// http://codex.wordpress.org/Function_Reference/wp_insert_attachment
$wp_filetype = wp_check_filetype(basename($movefile['url']), null);
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($movefile['url']),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($movefile['url'])),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment($attachment, $movefile['url']);
$attach_data = wp_generate_attachment_metadata($attach_id, $movefile['url']);
wp_update_attachment_metadata($attach_id, $attach_data);
$result = array(
'id' => $attach_id,
'resized' => $resized,
'test' => $wp_upload_dir
);
echo json_encode($result);
exit;
}
任何人都可以指向正确的方向吗?
为了澄清溶液(因为它花了一段时间来弄明白):你必须通过wp_generate_attachment_metadata
的相对目录路径,而不是与HTTP的URL路径:在前面//。
所以不是:
$attach_data = wp_generate_attachment_metadata($attach_id, $movefile['url']);
它应该是:
$attach_data = wp_generate_attachment_metadata($attach_id, ($wp_upload_dir['path'] . '/' . basename($movefile['url'])));
请注意,我用wp_upload_dir
的路径属性,而不是它的网址属性。
感谢您澄清我先前的答案。它看起来像[Codex](http://codex.wordpress.org/Function_Reference/wp_generate_attachment_metadata)已经更新,因为我后来发布了这个。 – alexsomeoddpilot
wp_generate_attachment_metadata
需要一个目录路径,而不是我传递的文件URL。
也许不安装imagemegick?因为这个功能使用imagmagick调整大小的图片缩略图尝试在控制台:
~$ apt-get install imagemagick php5-imagick
不要忘记您使用重启动Apache
哪个WordPress版本?如果你禁用了所有的插件,问题是否仍然存在? –