1 回答
TA贡献1831条经验 获得超4个赞
我不确定您是否需要像这样多次打开 zip 存档 - 特别是当另一个实例已经打开但我很想尝试以下内容时 - 我应该强调它完全未经测试。
测试后更新:如果您这样做,则无需使用display.php- 似乎在不同的.docx文件上工作正常。返回的数据$zip->getFromIndex产生原始图像数据(所以我发现),因此由于长度原因,无法将其传递到查询字符串中。我试图避免不必要地打开/关闭 zip 存档,因此下面的方法将原始数据添加到输出数组,然后使用这个内联的 base64 编码数据显示图像。
<?php
#extract.php
$document = 'sample.docx';
function readZippedImages($filename) {
$paths=[];
$zip = new ZipArchive;
if( true === $zip->open( $filename ) ) {
for( $i=0; $i < $zip->numFiles;$i++ ) {
$zip_element = $zip->statIndex( $i );
if( preg_match( "([^\s]+(\.(?i)(jpg|jpeg|png|gif|bmp))$)", $zip_element['name'] ) ) {
$paths[ $zip_element['name'] ]=base64_encode( $zip->getFromIndex( $i ) );
}
}
}
$zip->close();
return $paths;
}
$paths=readZippedImages( $document );
/* to display & save the images */
foreach( $paths as $name => $data ){
$filepath=__DIR__ . '/' . $name;
$dirpath=pathinfo( $filepath, PATHINFO_DIRNAME );
$ext=pathinfo( $name, PATHINFO_EXTENSION );
if( !file_exists( $dirpath ) )mkdir( $dirpath,0777, true );
if( !file_exists( $filepath ) )file_put_contents( $filepath, base64_decode( $data ) );
printf('<img src="data:image/%s;base64, %s" />', $ext, $data );
}
?>
- 1 回答
- 0 关注
- 140 浏览
添加回答
举报