web-dev-qa-db-fra.com

Modifier l'image lors du téléchargement

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?

3
CBeTJlu4ok

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.

2
CBeTJlu4ok