【问题标题】:Adding a gif to a larger background将 gif 添加到更大的背景
【发布时间】:2012-10-02 08:31:38
【问题描述】:

我正在使用 imagemagick 来调整上传文件的大小,但在处理它们时,我想向用户显示一个旋转的 gif 轮,缩略图通常是在哪里。我提供大约 7 种大小的拇指,并希望轮子在中间保持 32x32 大小,这很简单。

我需要知道的是,我可以在保持动画的同时做到以上几点

例子:

这张图片:

从这个尺寸开始

带动画

【问题讨论】:

    标签: imagemagick imagemagick-convert


    【解决方案1】:

    看看这个小提琴,它可能包含你想要的:http://jsfiddle.net/TGdFB/1/

    它使用 jQuery,但应该很容易适应...

    【讨论】:

    • 我已经研究过使用 css 解决方案,但它不适用于我们当前的代码结构。如果它更重要,我可以保证更改并使用 css/jquery 但这只会在文件排队时显示,然后无论如何都会生成缩略图。
    • 它可能会有所帮助,如果你发布你已经拥有的东西。您根本不想拥有任何 javascript 吗?当您的图像被处理时,您肯定会有某种回调,或者您将如何交换图像? 困惑
    • 好吧,我要做的只是生成这些文件一次,处理是由另一个进程从 mysql 中的作业列表中读取的。考虑这是一个静态图像,而不是尚未生成的缩略图。一些内容上传可能是大型视频文件,在生成图像之前会转换为两种不同的格式,这可能需要一段时间,具体取决于几个因素。因此,我不想在用户浏览他们的内容页面时显示黑色方块,而是想显示其中一个缩略图。不过谢谢,我明白你想向我解释什么!
    • 因此,您使用该加载图像创建一个缩略图并在某个时间替换它,当您的拇指生成完成时,加载图像和拇指具有相同的文件名?在这种情况下,我建议创建与最终拇指大小相同的加载拇指。
    【解决方案2】:

    在无法通过 imagemagick 找到自动执行此操作的方法后,最终由 Photoshop 手动执行此操作。我找到了 'coalesce' 标志,但没有找到其他标志。

    【讨论】:

      【解决方案3】:

      在我用来给 gif 动画图像加水印的 php 女巫中有一个解决方案.... 它会创建一个黑色的免费背景,在上面放一张图片,然后放水印......

      watermarkpath = 'path to wathermarkimage.jpg|gif|png';
      $imagepath= 'path to the image';     
      $watermark = new Imagick($watermarkpath);
       $GIF = new Imagick();
       $GIF->setFormat("gif");
      
      $animation = new Imagick($imagepath);
      foreach ($animation as $frame) {
      
          $iWidth = $frame->getImageWidth();
          $iHeight = $frame->getImageHeight();
          $wWidth = $watermark->getImageWidth();
          $wHeight = $watermark->getImageHeight();
      
          if ($iHeight < $wHeight || $iWidth < $wWidth) {
              // resize the watermark
              $watermark->scaleImage($iWidth, $iHeight);
      
              // get new size
              $wWidth = $watermark->getImageWidth();
              $wHeight = $watermark->getImageHeight();
          }
      
          $bgframe = new Imagick();
          $bgframe->newImage(($iWidth), ($iHeight + 80), new ImagickPixel('Black'));
          $bgframe->setImageDelay($frame->getImageDelay());
      
      
          $x = ($iWidth) - $wWidth - 5;
          $y = ($iHeight + 80) - $wHeight - 5;
      
      
          $bgframe->compositeImage($frame, imagick::COMPOSITE_DEFAULT, 0, 0);
           $bgframe->flattenImages();
          $bgframe->compositeImage($watermark, imagick::COMPOSITE_OVER, $x, $y);
           $bgframe->flattenImages();
          $GIF->addImage($bgframe);
      }
      
      
      
      $GIF->writeimages($imagepath,true);
      

      【讨论】:

        猜你喜欢
        • 2016-01-09
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多