在插入帖子之前裁剪图像

时间:2017-01-08 作者:Andy

我有一个前端帖子表单,我一直在使用这个PHP代码来允许上传一个图像并将其插入帖子。

    // image upload and attatching to post
    if ( ! empty( $_FILES ) && ! empty( $_FILES[\'upload-image\'][\'name\'] ) ) {

        // upload image to server
        $upload = wp_upload_bits( $_FILES[\'upload-image\'][\'name\'], null, file_get_contents( $_FILES[\'upload-image\'][\'tmp_name\'] ) );

        // insert new image to the just created post ================================
        $wp_filetype = wp_check_filetype( basename( $upload[\'file\'] ), null );
        $wp_upload_dir = wp_upload_dir();

        $attachment = array(
            \'guid\'           => $wp_upload_dir[\'baseurl\'] . _wp_relative_upload_path( $upload[\'file\'] ),
            \'post_mime_type\' => $wp_filetype[\'type\'],
            \'post_title\'     => preg_replace(\'/\\.[^.]+$/\', \'\', basename( $upload[\'file\'] )),
            \'post_content\'   => \'\',
            \'post_status\'    => \'inherit\'
        );
        $attach_id = wp_insert_attachment( $attachment, $upload[\'file\'], $post_id );

        require_once(ABSPATH . \'wp-admin/includes/image.php\');

        $attach_data = wp_generate_attachment_metadata( $attach_id, $upload[\'file\'] );      
        wp_update_attachment_metadata( $attach_id, $attach_data );
        update_post_meta( $post_id, \'_thumbnail_id\', $attach_id );
        // end insert ==============================================

    }
如何确保在将所有图像插入帖子之前,将其裁剪为16:9的纵横比?因此,如果图像的高度太高,它会将顶部和底部裁剪成16:9的比例,如果图像的宽度太宽,它会将侧面裁剪成16:9的比例。

我在这里找到了一个函数,它总是将图像裁剪成16:9的比例,我可以根据这个比例进行计算:https://stackoverflow.com/questions/29063094/php-fit-any-size-image-to-169-aspect-ratio (未测试)。但我不知道如何在我上面的代码中使用它-16:9的比例图像需要在插入帖子之前准备好。

感谢您的帮助。

1 个回复
SO网友:prosti

我认为你很好,但你不需要使用其他功能。你有全部

File: wp-includes/media.php
例如,您可以_wp_get_image_size_from_meta 要获取图像尺寸,无需使用以下内容:

$size = getimagesize($file);
$width = $size[0];
$height = $size[1];
$mime = $size[\'mime\'];
获取图像尺寸和类型。

另一方面,不清楚为什么不使用add_image_size

File: wp-includes/media.php
256: /**
257:  * Register a new image size.
258:  *
259:  * Cropping behavior for the image size is dependent on the value of $crop:
260:  * 1. If false (default), images will be scaled, not cropped.
261:  * 2. If an array in the form of array( x_crop_position, y_crop_position ):
262:  *    - x_crop_position accepts \'left\' \'center\', or \'right\'.
263:  *    - y_crop_position accepts \'top\', \'center\', or \'bottom\'.
264:  *    Images will be cropped to the specified dimensions within the defined crop area.
265:  * 3. If true, images will be cropped to the specified dimensions using center positions.
266:  *
267:  * @since 2.9.0
268:  *
269:  * @global array $_wp_additional_image_sizes Associative array of additional image sizes.
270:  *
271:  * @param string     $name   Image size identifier.
272:  * @param int        $width  Image width in pixels.
273:  * @param int        $height Image height in pixels.
274:  * @param bool|array $crop   Optional. Whether to crop images to specified width and height or resize.
275:  *                           An array can specify positioning of the crop area. Default false.
276:  */
277: function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
278:    global $_wp_additional_image_sizes;
279: 
280:    $_wp_additional_image_sizes[ $name ] = array(
281:        \'width\'  => absint( $width ),
282:        \'height\' => absint( $height ),
283:        \'crop\'   => $crop,
284:    );
285: }
您可以设置$crop 选项设置为true,并创建16:9比例的缩略图。这会将图像组织到特定的大小。

您可以多次添加:

add_image_size( \'andy1\', 160, 90 , true);
add_image_size( \'andy2\', 1600, 900, true);
如果可能的话,将以您喜欢的方式创建缩略图。

如果您与image srcset 属性这很方便。

相关推荐

Remove <p></p> after images

我对<p></p> 出现在my之后的标记<img....>. 以下是我在本地主机上查看生成的页面时显示的内容。。。<img src=\"/wp-content/themes/wunderful/assets/images/feedback-danielle.png\" alt=\"Danielle Johnson Deal Town FC Treasurer\"> <p></p> 请注意随机生成的<p>&