Wordpress - 如何使用自动调整大小的图像

时间:2016-12-07 20:27:37

标签: php wordpress

我为我的一位客户开发了一个主题。

自定义主题使用读取特定文件夹的js库,然后使用此文件夹中的图片生成图库。

我的想法是使用uploads文件夹,以便我的客户可以自己管理图库而无需我的干预。

Wordpress会自动将多张图片保存在此文件夹中,但这很容易解决:

  • 将上传更改为子文件夹选项
  • 将所有尺寸更改为0以防止调整大小。

这两个选项几乎可以工作,我说几乎是因为我的文件夹中保存的副本尺寸为768x510。

同样,我可以关注这一点,因为我实际上有另一个想法......

我想使用的js库,允许我创建一个名为Thumbnails的子文件夹,并在此文件夹中添加相同的图片,但是以小格式添加时间,我希望这样做。< / p>

所以这是我真实的问题(对于长篇介绍感到抱歉) 是否可以编写自定义函数,或者是否有任何插件可以让我说:

&#34;对,这里有一张图片,现在用我告诉你的尺寸裁剪它(只有一个),不要重命名它(不要在末尾添加尺寸)然后移动它进入这个文件夹(缩略图)&#34;

我还没有任何代码,因为我正在寻求正确的方向,而且最重要的是,如果它甚至可能!

感谢任何建议

3 个答案:

答案 0 :(得分:2)

无法使用 add_attachment edit_attachment 操作,这些操作会在保存图像后触发,以制作缩略图并将其保存到您的位置希望?

add_action('add_attachment', 'theme_attachment_handler', 999);
add_action('edit_attachment', 'theme_attachment_handler', 999);
...
function theme_attachment_handler($attachment_id) {

    $image = wp_get_image_editor( $metadata['file'] );
    if ( ! is_wp_error( $image ) ) {
        $image->resize( 300, 300, true );
        $image->save( 'newpath/new_image.jpg' );
    }
    // Note you can get all the sizes here too, and cleanup:
    $metadata = wp_get_attachment_metadata($attachment_id);
    if(!empty($metadata['sizes'])) {
        foreach($metadata['sizes'] as $size_name => $size_info) {
            // delete, move, ....
        }
    }
}

希望这有帮助!

答案 1 :(得分:0)

是的,这绝对是可能的。您可以通过readdir获取文件,然后您可以通过这样的方式传递它们。

这是php函数调整大小的示例注意:这只是我铺设的一些功能。

function resize($path,$x1,$y,$w,$h,$x2,$y2){
        $x = getimagesize($path);            
        switch ($x['mime']) {
            case "image/gif":
                $img = imagecreatefromgif($path);
            break;
            case "image/jpeg":
                $img = imagecreatefromjpeg($path);
            break;
            case "image/png":
                $img = imagecreatefrompng($path);
            break;
       }
        $width  = imagesx($img); 
        $height = imagesy($img); 
        $scalerw = ($width / $x2);
        $scalerh = ($height / $y2);

        $w = $w * 2;
        $h = $h *2;
        $img_base = imagecreatetruecolor($w,$h);
        $x1 = $x1 * $scalerw;
        $y = $y * $scalerh;

        imagecopyresampled($img_base, $img,0,0,$x1,$y,$x2 * 2,$y2 * 2, $width, $height);

        $path_info = pathinfo($path);    
        switch ($path_info['extension']) {
            case "gif":
                imagegif($img_base, $path);  
            break;
            case "jpeg":
                imagejpeg($img_base, $path);  
                break;
            case "png":
                imagepng($img_base, $path);  
                break;
            case "jpg":
                imagejpeg($img_base,$path);
                break;
        }
       imagedestroy($img_base);
    }

解释变量:

  • $path =文件的路径,因此从所有图像中进行循环。
  • $x1 =您要选择的图像部分的x坐标。
  • $y1 =您要选择的图像部分的y坐标。
  • $w =您要选择的图像部分的宽度。
  • $h =您要选择的图像部分的高度。
  • $x2 =原始图片的宽度
  • $y2 =原始图片的高度

enter image description here

所以你基本上可以从原始图像中选择一个这样的盒子。但是,然后使用php

如何更改保存路径:

您可以在imagegifswitch语句中的任何其他代码的最后一部分代码中轻松更改其保存位置的路径。你在那里看到了变量$path,这就是它保存的地方(在这种情况下,确切地说,如果找到图像的话)。这样您就可以将其精确地保存到您想要的位置。

我希望这一切都有意义,进一步的问题,请不要犹豫。

答案 2 :(得分:0)

你可以使用这个插件Imsanityresize image 您可以学习插件的工作原理