【问题标题】:ImageMagick tells me image is corrupted in production - but works locallyImageMagick 告诉我图像在生产中损坏 - 但在本地工作
【发布时间】:2014-08-24 15:13:58
【问题描述】:

在尝试向 PNG 图像添加文本时,ImageMagick 给了我一些奇怪的“损坏的图像”错误消息。

我创建了一个在 WordPress 中实现的函数,它接受表单输入数据,并将输入作为文本添加到 PNG 图像中,然后将其与其他几个 PNG 合并并输出为多页 PDF。

运行该函数时,ImageMagick 告诉我Fatal error: Uncaught exception "ImagickException" with message "corrupt image "/home/1/u/utoya/www//wp-content/uploads/pdf/innside.png" ..(链接到底部的完整错误消息)。

但是,相同的代码在我的本地网络服务器上运行良好,但在生产环境中却不行。我使用完全相同的文件,在相同的位置和相同的 chmod 设置。

PNG 是不是因为文件太大而无法读取,某处是否存在内存限制,或者我应该如何处理此错误消息?

我的代码如下所示:

function generate_pdf( $purchaseData )
{
    $toName   = $purchaseData['toName'];
    $fromName = $purchaseData['fromName'];
    $email    = $purchaseData['recipientEmail'];
    $filename = date('dmY') . '-' . md5(date('dmY')) . '.pdf';

    // die( '../..' . '/uploads/pdf/innside.png' );

    // Create new Imagick PDF container
    $combined = new Imagick();

    // Create new Imagick object of inside page
    $image = new Imagick( ABSPATH . '/wp-content/uploads/pdf/innside.png' );

    // Create drawing capabilities
    $draw = new ImagickDraw();

    // Set text color
    $draw->setFillColor('black');

    // Add 'To' text
    $draw->setFont( ABSPATH . 'fonts/Georgia-Bold-Italic.ttf' );
    $draw->setFontSize(44);
    $image->annotateImage($draw, 2020, 268, 0, $toName);

    // Add 'From' text
    $draw->setFont(ABSPATH . 'fonts/Georgia-Italic.ttf');
    $image->annotateImage($draw, 2020, 987, 0, $fromName);

    // Add all pages to PDF
    $combined->addImage( new Imagick( ABSPATH . '/uploads/pdf/forside.png' ) ); // Front page
    $combined->addImage( $image ); // Inside page
    $combined->addImage( new Imagick( ABSPATH . '/uploads/pdf/bakside.png' ) ); // Back page

    // Set output format
    $combined->setFormat('pdf');

    // Save pages to file
    $pdf = $combined->writeImages( ABSPATH . '/generated/' . $filename, TRUE );

    $attachments = array( ABSPATH . '/generated/' . $filename );
    wp_mail( $email, 'Innledergavekort til ' . $toName, 'Hei, her kommer ditt gavekort', NULL, $attachments );
}

(很长的)错误可以在这里找到:http://pastebin.com/db216Qvz

【问题讨论】:

  • 您是否在两种环境中使用相同版本的 ImageMagick?
  • 既然您找到了解决方案(即使不是很正统的解决方案),您应该考虑发布您自己问题的答案,甚至将其标记为已接受。
  • 你能在某处发布一个不工作的 png 示例吗?

标签: php wordpress imagemagick pdf-generation imagick


【解决方案1】:

我解决了。似乎PNG是问题所在。改用 JPEG(对文件大小进行了一些压缩),现在可以使用了。

不知道为什么它有效,但它确实有效。

【讨论】:

  • 哪个版本的 ImageMagick 崩溃了?
  • 为什么@Danack 没有解决?它解决了我最初遇到的问题。如果你的车刹车了,而机械师修好了,问题就解决了。作为司机,您不一定需要知道为什么
  • 如果你打算使用不好的类比......如果你的车坏了,你不要放弃它并开始使用另一辆车。该 PNG 或 imagick 库对 PNG 的处理存在问题,但切换到 JPG 并不能解决问题,它只是避免了问题。
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多