J'ai un plugin qui télécharge une image en utilisant wp_upload_handler
voici une fonction:
//handles upload, a modified version of bp_core_avatar_handle_upload(from bp-core/bp-core-avatars.php)
function handle_upload( ) {
global $bp;
//include core files
require_once( ABSPATH . '/wp-admin/includes/file.php' );
$max_upload_size=$this->get_max_upload_size();
$max_upload_size=$max_upload_size*1024;//convert kb to bytes
$file=$_FILES;
//I am not changing the domain of erro messages as these are same as bp, so you should have a translation for this
$uploadErrors = array(
0 => __('There is no error, the file uploaded with success', 'buddypress'),
1 => __('Your image was bigger than the maximum allowed file size of: ', 'buddypress') . size_format($max_upload_size),
2 => __('Your image was bigger than the maximum allowed file size of: ', 'buddypress') . size_format($max_upload_size),
3 => __('The uploaded file was only partially uploaded', 'buddypress'),
4 => __('No file was uploaded', 'buddypress'),
6 => __('Missing a temporary folder', 'buddypress')
);
if ( $file['error'] ) {
bp_core_add_message( sprintf( __( 'Your upload failed, please try again. Error was: %s', 'buddypress' ), $uploadErrors[$file['file']['error']] ), 'error' );
return false;
}
if ( ! ($file['file']['size']<$max_upload_size) ) {
bp_core_add_message( sprintf( __( 'The file you uploaded is too big. Please upload a file under %s', 'buddypress'), size_format($max_upload_size) ), 'error' );
return false;
}
if ( ( !empty( $file['file']['type'] ) && !preg_match('/(jpe?g|gif|png)$/i', $file['file']['type'] ) ) || !preg_match( '/(jpe?g|gif|png)$/i', $file['file']['name'] ) )
{
bp_core_add_message( __( 'Please upload only JPG, GIF or PNG photos.', 'buddypress' ), 'error' );
return false;
}
$uploaded_file = wp_handle_upload( $file['file'], array( 'action'=> 'bp_upload_profile_bg' ) );
//if file was not uploaded correctly
if ( !empty($uploaded_file['error'] ) ) {
bp_core_add_message( sprintf( __( 'Upload Failed! Error was: %s', 'buddypress' ), $uploaded_file['error'] ), 'error' );
return false;
}
//assume that the file uploaded succesfully
//delete any previous uploaded image
self::delete_bg_for_user();
//save in usermeta
update_user_meta(bp_loggedin_user_id(),'profile_bg',$uploaded_file['url']);
update_user_meta(bp_loggedin_user_id(),'profile_bg_file_path',$uploaded_file['file']);
update_user_meta(bp_loggedin_user_id(),'profile_bg_pos',0);
do_action('bppg_background_uploaded',$uploaded_file['url']);//allow to do some other actions when a new background is uploaded
return true;
}
avant de télécharger je veux modifier ce fichier. Généralement, je veux ajouter un effet de "flou" à l'image. est-ce possible avec une telle structure?
voici comment je l'ai fait
preg_match('/\.[^\.]+$/i',$file['file']['name'],$ext);
$name = md5(time().$user_id.Rand( 5, 97));
$name_one = $name.$ext[0];
$name_blur = $name.'_blur'.$ext[0];
$file['file']['name'] = $name_one;
$upload = wp_upload_dir();
$uploaded_file = wp_handle_upload( $file['file'], array( 'action'=> 'bp_upload_profile_bg' ) );
//if file was not uploaded correctly
if ( !empty($uploaded_file['error'] ) ) {
bp_core_add_message( sprintf( __( 'Upload Failed! Error was: %s', 'buddypress' ), $uploaded_file['error'] ), 'error' );
return false;
}
$destination = $upload['path'].'/'.$name_blur;
@copy($uploaded_file['file'], $destination);
if ( !empty( $file['file']['type'] ) ) {
$type = $file['file']['type'];
} elseif( !preg_match('/(jpe?g|gif|png)$/i', $file['file']['type'] )) {
$type = preg_match('/(jpe?g|gif|png)$/i', $file['file']['type']);
} else {
$type = preg_match( '/(jpe?g|gif|png)$/i', $file['file']['name'] );
}
if($type == 'image/jpg' || $type == 'image/jpeg') {
$img = imagecreatefromjpeg($destination);
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img, IMG_FILTER_SMOOTH, -4);
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
imagejpeg($img, $destination);
} elseif($type == 'image/png') {
$img = imagecreatefrompng($destination);
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img, IMG_FILTER_SMOOTH, -4);
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
imagepng($img, $destination);
} elseif($type == 'image/gif') {
$img = imagecreatefromgif($destination);
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img, IMG_FILTER_SMOOTH, -4);
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
imagegif($img, $destination);
}
ce que je fais ici, c'est que je télécharge l'image normalement, puis copie ce fichier avec _blur
ajouté au nom, puis modifie cette image
J'espère que cela aide quelqu'un.