1

我正在尝试读取一个 zip 文件并使其正常工作。现在我想获取 zip 文件的内容(图像)。但是图像被扭曲了。这是我的代码片段:

while ($zip_entry = zip_read($zip))
{
    echo "<p>";
    echo "Name: " . zip_entry_name($zip_entry) . "<br />";

    if (zip_entry_open($zip, $zip_entry))
    $contents = zip_entry_read($zip_entry);
      $name=zip_entry_name($zip_entry);
    file_put_contents('uphoto/'.$i.'.jpg',$contents);

}
4

3 回答 3

1

您可以尝试创建一个新图像:

$i = 0;
while ($zip_entry = zip_read($zip))
{
    $content = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));                                  
    $image = imagecreatefromstring($content);
    $filename = 'uphoto/'.$i++.'.jpg';
    imagejpeg($image, $filename);
    imagedestroy($image);
    echo '<img src="data:image/jpeg;base64,' . base64_encode($content) . '"><br />';
}

我使用 zip_entry_filesize() 来定义似乎需要让它工作的内容的大小。

于 2013-11-04T13:42:26.337 回答
0

当您在图像数据中插入 < br /> 时,它不会起作用。您不能仅通过回显其内容在网页上显示图像。例如,您应该对其进行 base64 编码并将其放入 img 标签中。然后您可以执行以下操作:

echo '<img src="data:image/jpeg;base64,' . base64_encode($content) . '"><br />';
于 2013-11-04T09:43:53.973 回答
0

base64_decode 能解决问题吗?未测试:

$i = 0;
while ($zip_entry = zip_read($zip))
{
    echo "<p>";
    echo "Name: " . zip_entry_name($zip_entry) . "<br />";

    if (zip_entry_open($zip, $zip_entry))
    $contents = base64_decode(zip_entry_read($zip_entry));
    $name=zip_entry_name($zip_entry);
    $filename = 'uphoto/'.$i++.'.jpg';
    file_put_contents($filename,$contents);
    echo '<img src="' . $filename . '">';
}
于 2013-11-04T09:56:57.450 回答