【问题标题】:Create thumbnails using PHP or manully add thumbnails?使用 PHP 创建缩略图或手动添加缩略图?
【发布时间】:2012-05-07 12:25:54
【问题描述】:

我有一个名为“Gallery”的文件夹,我在其中创建了一个名为“Gallery-Thumbs”的缩略图文件夹,我在其中手动添加缩略图。

我的问题是手动添加缩略图还是使用“GD”或“ImageMagick”动态创建缩略图更好。

手动添加缩略图的问题

  • 如果我忘记为照片添加缩略图,画廊链就会中断
  • 调整所有图像的大小以创建缩略图很繁琐

那么使用 PHP ImageProcessing 函数是否会在创建缩略图时增加额外的开销或者是正确的方法?

-- 为回答问题而更新

  1. 如何将图像添加到“画廊”文件夹?

    • 通过直接文件上传
  2. 如何访问这些图像和缩略图?

    • 我使用 glob 来获取各个文件夹中的文件列表
  3. 您如何(想要)将图像映射到缩略图?

    • 对于缩略图,我使用 imageName-thumb.jpg, 所以它们出现在列表中的顺序与它们在主图像文件夹中的顺序相同

【问题讨论】:

  • 如果您能提供有关以下内容的更多详细信息,我将不胜感激:1. 如何将图像添加到“画廊”文件夹? (通过 PHP 脚本上传或直接复制图像文件) 2. 如何访问这些图像和缩略图? (使用 PHP 或类似网站的网站,或者直接访问该文件夹) 3. 您如何(想要)将图像映射到缩略图?您是否对图像及其缩略图使用相似的文件名?或者您是否有一个将图像文件名与缩略图文件名匹配的数据库表?

标签: php imagemagick


【解决方案1】:

使用 PHP 创建缩略图一次并将它们保存在具有相同文件名的“缩略图”目录中。然后直接使用这些现在可以使用的缩略图。

【讨论】:

  • 为什么只有一次?我不保存拇指,我在请求时创建它们(+缓存),因为在网络上有不同尺寸的拇指。一切似乎都很好。 (对不起我的英语)
  • 他的意思是你的 PHP 脚本应该生成一个缩略图并将其存储为缓存。从这里,您的脚本可以检测是否已生成缩略图并跳过它,从而节省计算时间。
  • 如何创建一次缩略图?如果我们每天运行该脚本,如果中午添加任何图像,缩略图会不会不匹配。
  • 如果您使用 PHP 脚本(上传页面)添加图像,您可以轻松地为每个上传的图像创建这些缩略图。但是,如果您将图像直接添加到文件夹“gallery”,那么每次对图像发出请求时,PHP 都应检查缩略图是否存在于“thumbnails”目录中。如果它在那里,只需加载它,否则,创建它然后加载它。
【解决方案2】:

如果您使用一些动态图像处理工具,那么这将是一个有点耗时的过程,但它会是一项很棒的技术。

如果您要使用手动流程,那么:

  • 使用某些客户端脚本强制使用缩略图
  • 这取决于您的图像方向

【讨论】:

    【解决方案3】:

    我在上传过程中创建缩略图,然后保存在具有相同名称的不同目录中,或者将 th_ 添加到文件名的前面。 您还可以上传一些代码以再次为您当前在图库中拥有的图像生成所有拇指,以防您错过任何一个。 您还可以同时调整大小,添加水印或添加其他效果。 这是我的画廊,我有一个拇指和正常大小;拇指在上传时被锐化并带有正常的水印。两个版本都有阴影,调整大小等都是用 Imagemagick 完成的。 http://www.rubble.info/gallery/

    如果您在显示之前检查该文件是否存在并且它丢失了,您可以显示默认图像。

    您可以查看我的网站,了解您可以使用 php 和 Imagemagick 做的许多不同的事情。

    【讨论】:

      【解决方案4】:

      我强烈建议使用带有某种缓存的 GD 来保留那些不变的缓存。然而,已经有一个很棒的库可以做到这一点。它绝对是我的最爱,只需使用 GET URL 即可轻松压缩图像和调整大小。

      通过 ShiftingPixel 试用 Smart Image Resizer: http://shiftingpixel.com/2008/03/03/smart-image-resizer/

      如果您愿意,可以使用我制作的网站作为参考,并使用其页面来源:http://www.eastwood-whelpton.co.uk/about/gallery.php

      本网站上的几乎所有图像都使用 Smart Image Resizer GD 库。

      如果您需要示例,我还可以提供我使用的 PHP 代码。此特定代码会自动将在我的画廊文件夹中找到的任何图像添加到此页面。

      【讨论】:

        【解决方案5】:

        如前所述,您需要支持 GD 的 PHP 5。如果你有这些,那么这里有一个非常方便的功能,可以从给定目录 ($from_dir) 中的每个图像创建给定尺寸和质量 ($options) 的缩略图并将它们保存到另一个目录 ($to_dir)。

        function make_thumbnails($from_dir,$to_dir, $options){
            $files = scandir($from_dir);
            $exclude = array('.','..','etc.');
            foreach($files as $fi => $fv){
                if(!in_array($fv,$exclude)){
                    $from_file = $from_dir.$fv;
                    $to_file = $target_dir.$fv;
                    list($img_width, $img_height,$img_type) = getimagesize($from_file);
                    $scale = min($options['max_width'] / $img_width,
                                                $options['max_height'] / $img_height
                                       );
                    $new_width = $img_width * $scale;
                    $new_height = $img_height * $scale;
                    $new_img = imagecreatetruecolor($new_width, $new_height);
                    $src_img = imagecreatefromjpeg($from_file);
                    $success = $src_img && imagecopyresampled(
                            $new_img,
                            $src_img,
                            0, 0, 0, 0,
                            $new_width,
                            $new_height,
                            $img_width,
                            $img_height
                    ) && imagejpeg($new_img, $to_file, $options['quality']);
                                      //Monitor results with $success - returns 1 or null
                    echo '<br />success:['.$success.']';
                }
            }
        }
        
        //Set options
        $from_dir = ':/source/dir';
        $to_dir = ':/destination/dir';
        $options = array();
        $options['max_width'] = 100;
        $options['max_height'] = 100;
        $options['quality'] = 100;
        
        // Make thumbs...
        make_thumbnails($from_dir,$to_dir,$options);
        

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 2011-06-18
          • 1970-01-01
          • 1970-01-01
          • 2011-02-09
          • 2011-02-18
          • 2015-05-04
          • 2013-10-22
          • 2011-02-25
          相关资源
          最近更新 更多