BP_Attachment::crop( array $args = array() )
Crop an image file.
Description
Parameters
- $args
-
(Optional)
- 'original_file'
(string) The source file (absolute path) for the Attachment. - 'crop_x'
(int) The start x position to crop from. - 'crop_y'
(int) The start y position to crop from. - 'crop_w'
(int) The width to crop. - 'crop_h'
(int) The height to crop. - 'dst_w'
(int) The destination width. - 'dst_h'
(int) The destination height. - 'src_abs'
(int) Optional. If the source crop points are absolute. - 'dst_file'
(string) Optional. The destination file to write to.
Default value: array()
- 'original_file'
Return
(string|WP_Error) New filepath on success, WP_Error on failure.
Source
File: bp-core/classes/class-bp-attachment.php
public function crop( $args = array() ) {
$wp_error = new WP_Error();
$r = bp_parse_args( $args, array(
'original_file' => '',
'crop_x' => 0,
'crop_y' => 0,
'crop_w' => 0,
'crop_h' => 0,
'dst_w' => 0,
'dst_h' => 0,
'src_abs' => false,
'dst_file' => false,
), 'bp_attachment_crop_args' );
if ( empty( $r['original_file'] ) || ! file_exists( $r['original_file'] ) ) {
$wp_error->add( 'crop_error', __( 'Cropping the file failed: missing source file.', 'buddyboss' ) );
return $wp_error;
}
// Check image file pathes.
$path_error = __( 'Cropping the file failed: the file path is not allowed.', 'buddyboss' );
// Make sure it's coming from an uploaded file.
if ( false === strpos( $r['original_file'], $this->upload_path ) ) {
$wp_error->add( 'crop_error', $path_error );
return $wp_error;
}
/**
* If no destination file is provided, WordPress will use a default name
* and will write the file in the source file's folder.
* If a destination file is provided, we need to make sure it's going into uploads.
*/
if ( ! empty( $r['dst_file'] ) && false === strpos( $r['dst_file'], $this->upload_path ) ) {
$wp_error->add( 'crop_error', $path_error );
return $wp_error;
}
// Check image file types.
$check_types = array( 'src_file' => array( 'file' => $r['original_file'], 'error' => __( 'source file', 'buddyboss' ) ) );
if ( ! empty( $r['dst_file'] ) ) {
$check_types['dst_file'] = array( 'file' => $r['dst_file'], 'error' => __( 'destination file', 'buddyboss' ) );
}
/**
* WordPress image supported types.
* @see wp_attachment_is()
*/
$supported_image_types = array(
'jpg' => 1,
'jpeg' => 1,
'jpe' => 1,
'gif' => 1,
'png' => 1,
);
foreach ( $check_types as $file ) {
$is_image = wp_check_filetype( $file['file'] );
$ext = $is_image['ext'];
if ( empty( $ext ) || empty( $supported_image_types[ $ext ] ) ) {
$wp_error->add( 'crop_error', sprintf( __( 'Cropping the file failed: %s is not a supported image file.', 'buddyboss' ), $file['error'] ) );
return $wp_error;
}
}
// Add the image.php to the required WordPress files, if it's not already the case.
$required_files = array_flip( $this->required_wp_files );
if ( ! isset( $required_files['image'] ) ) {
$this->required_wp_files[] = 'image';
}
// Load the files.
$this->includes();
// Finally crop the image.
return wp_crop_image( $r['original_file'], (int) $r['crop_x'], (int) $r['crop_y'], (int) $r['crop_w'], (int) $r['crop_h'], (int) $r['dst_w'], (int) $r['dst_h'], $r['src_abs'], $r['dst_file'] );
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 2.3.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.