2013-11-27 73 views
1

我正在研究一種將圖像添加到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; 
} 

任何人都可以指向正確的方向嗎?

+0

哪個WordPress版本?如果你禁用了所有的插件,問題是否仍然存在? –

回答

2

爲了澄清溶液(因爲它花了一段時間來弄明白):你必須通過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路徑屬性,而不是它的網址屬性。

+0

感謝您澄清我先前的答案。它看起來像[Codex](http://codex.wordpress.org/Function_Reference/wp_generate_attachment_metadata)已經更新,因爲我後來發佈了這個。 – alexsomeoddpilot

0

wp_generate_attachment_metadata需要一個目錄路徑,而不是我傳遞的文件URL。

-1

也許不安裝imagemegick?因爲這個功能使用imagmagick調整大小的圖片縮略圖嘗試在控制檯:

~$ apt-get install imagemagick php5-imagick 

不要忘記您使用重啓動Apache