无法使用PHP在PDF中显示调整大小的图像

问题描述 投票:0回答:1

我正在尝试从外部URL加载图像,然后调整其大小并以PDF格式显示。我现在尝试使用单个图像来实现它,但是整个功能将在foreach循环内,用于处理很多非常大的图像。

[首先,我调整图像的大小,然后获取图像的内容,应用base65编码,从中建立源字符串,并将该字符串添加到我的img src标签中。这是我的代码-

    $filename = 'https://jooinn.com/images/nature-319.jpg'; // URL of the image
    $percent = 0.25; // percentage of resize

    // Content type
    header('Content-type: image/jpeg');

    // Get new dimensions
    list($width, $height) = getimagesize($filename);
    $new_width = $width * $percent;
    $new_height = $height * $percent;

    // Resample
    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    // Output
    $imageData = base64_encode(file_get_contents($image_p));

    // Format the image SRC:  data:{mime};base64,{data};
    $src = 'data: '.mime_content_type($image_p).';base64,'.$imageData;

    // Echo out a sample image
    echo '<img src="' . $src . '">';
    imagedestroy($image_p);

我认为问题出在此行$imageData = base64_encode(file_get_contents($image_p));,我做错了。它可以很好地与URL配合使用,但是如何在此处将其用于调整大小的图像?例如,只要我不使用调整大小的图像,以下代码就可以完美地工作-

    $filename = 'https://jooinn.com/images/nature-319.jpg'; // URL of the image
    // Output
    $imageData = base64_encode(file_get_contents($filename));

    // Format the image SRC:  data:{mime};base64,{data};
    $src = 'data: '.mime_content_type($filename).';base64,'.$imageData;

    // Echo out a sample image
    echo '<img src="' . $src . '">';
php pdf image-resizing
1个回答
0
投票

的确,如您所说,代码中的以下行是错误的:

$imageData = base64_encode(file_get_contents($image_p));

$image_p变量不是由imagecreatetruecolor创建的资源的文件名。首先必须使用imagejpeg()将其转换为jpeg文件。您可以避免在使用ob_*xxx*函数编码为base64之前保存中间文件。

ob_start();
imagejpeg($image_p);
$imageContent = ob_get_contents();
$imageData = base64_encode($imageContent);
ob_end_clean();

您再次遇到此行的问题,因为$image_p不是文件名:

$src = 'data: '.mime_content_type($image_p).';base64,'.$imageData;

创建jpeg文件时,应将其替换为:

$src = 'data: image/jpeg;base64,'.$imageData;

为了方便起见,这里是完整的工作脚本:

$filename = 'https://jooinn.com/images/nature-319.jpg'; // URL of the image
$percent = 0.25; // percentage of resize

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
ob_start();
imagejpeg($image_p);
$imageContent = ob_get_contents();
$imageData = base64_encode($imageContent);
ob_end_clean();

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: image/jpeg;base64,'.$imageData;

// Echo out a sample image
echo '<img src="' . $src . '">';
imagedestroy($image_p);
© www.soinside.com 2019 - 2024. All rights reserved.