我正在WordPress中开发一个自定义图片上传字段,但是一旦上传图片我就会遇到很多困难。除了上传,我还需要调整图片大小以使用缩略图。每次我尝试使用上传的图像时,都会因无法找到文件而出错(即使我可以在浏览器中查看它并且显然在目录中)。上传时图像默认为666,但我也尝试在777处操作一个具有相同结果的图像。上传图像后,将自行调用resize函数。这是我尝试过的一次尝试:
function resize_author_picture($filename) {
$filename = $_POST['file'];
$file = fopen($filename, 'r');
$data = fread($file);
fclose($file);
$dimensions = getimagesize($filename);
$dir = dirname($filename);
$crop = wp_crop_image( $data, $dimensions[0], $dimensions[1], 0, 0, 250, 280, null, $dir."/image.jpg" );
die( "crop: ".var_dump($crop)." file: ".$filename." path: ".$dir."/image.jpg" );
}
这里我使用fopen()作为第二次尝试,只提供图像的路径不起作用。这是之前的尝试:
function resize_author_picture($file) {
$file = $_POST['file'];
$dimensions = getimagesize($file);
$dir = dirname($file);
$crop = wp_crop_image( $file, $dimensions[0], $dimensions[1], 0, 0, 250, 280, null, $dir."/image.jpg" );
die( "crop: ".var_dump($crop)." file: ".$file." path: ".$dir."/image.jpg" );
}
两者都沿着以下行返回WP错误对象:
string(123) "File <http://site.local/wp-content/uploads/2010/09/squares-wide.jpeg> doesn't exist?"
没有想法,任何意见都表示赞赏!
答案 0 :(得分:2)
怀疑你仍然需要一个答案,因为这个问题已经很老了,但这是为了将来的参考:
您获得的错误是wp_load_image
使用wp_crop_image
的回复。 wp_load_image
使用php函数file_exists
,需要在没有域的情况下提供文件路径。
所以
$crop = wp_crop_image( $file, $dimensions[0], $dimensions[1], 0, 0, 250, 280,
null, "wp-content/uploads/2010/09/squares-wide.jpeg" );
会起作用。
旁边wp_upload_bits
不仅会为您上传文件,还会返回上传文件的网址。
如果您这样调用wp_upload_bits
(其中“file”是表单输入的名称):
if ($_FILES["file"]["name"]!="") {
$uploaded_file = wp_upload_bits($_FILES["file"]["name"], null,
file_get_contents($_FILES["file"]["tmp_name"]));
}
因此$uploaded_file['url']
相当于$dir."/image.jpg"
。在上面的裁剪中,您可以使用$uploaded_file['url']
的子字符串。
具体示例:
使用http://site.local/wp-content/uploads/2010/09/squares-wide.jpeg
,这将有效:
$dir = dirname($file);
$dir_substr = substr($dir, 18)
$crop = wp_crop_image( $file, $dimensions[0], $dimensions[1], 0, 0, 250, 280,
null, $dir."/squares-wide.jpeg" );
当然你也希望文件名是动态的,所以我按照上面的建议调用wp_uload_bits
(如果它不是来自表单字段,而是WP Custom字段就像你现在所做的那样调用它,重要的部分是$uploaded_file = wp_upload_bits(...)
以保存wp_upload_bits
在变量中的返回以供以后使用)然后执行
$file_uri = substr($uploaded_file['url'], 18);
$crop = wp_crop_image( $file, $dimensions[0], $dimensions[1], 0, 0, 250, 280,
null, $file_uri );
答案 1 :(得分:0)
如果您使用内联上传功能,则您的图片将位于/ wp-content / uploads文件夹中,除非您在其他管理面板上指定了另一个文件夹。
请确保您没有更改上传目录位置。
尝试使用WP Post工具上传,以确保您的设置正确无误。然后继续调试代码 - 一旦排除了最基本的代码。