3

I have a plugin which uploads image using wp_upload_handler

here is a function:

//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;
}

before uploading I want to modify this file. Generally I want to add "blur" effect to image. is it possible with such structure?

2

this is how I've done it

  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);
  }

what I do here is I upload image normally, then copy that file with _blur added to the name and then modify that image

Hope this helps anyone.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.