我有一个GAE php脚本,它旋转给定的图像(存储在GCS中),然后将其写入它源自的同一GCS存储桶(都在同一个云平台项目中)。
一切正常 - 图像正确加载、旋转并保存。问题是,当保存图像时,GCS将其类型识别为binary/octet-stream
而不是image/jpeg
,这会导致任何公共链接自动下载图像文件,而不是直接在浏览器中显示它。
代码:
$bucket = 'gs://my-bucket-here/';
$imageRes = imagecreatefromjpeg($bucket . $picName);
if ($imageRes) {
$rotate = imagerotate($imageRes, 90, 0);
imagedestroy($imageRes);
imagejpeg($rotate, $bucket . "test.jpg");
imagedestroy($rotate);
}
关于导致这种情况的原因的任何提示?我想过改用 Imagick,但它在 GAE 中不可用......
您可以在上下文选项中指定内容类型,在这种情况下,您需要在默认选项中设置它,因为无法将上下文传递给 imagejpeg()
方法。
$options = [
'gs' => [
'Content-Type' => 'image/jpeg',
],
];
stream_context_set_default($options);
$bucket = 'gs://my-bucket-here/';
$imageRes = imagecreatefromjpeg($bucket . $picName);
if ($imageRes) {
$rotate = imagerotate($imageRes, 90, 0);
imagedestroy($imageRes);
imagejpeg($rotate, $bucket . "test.jpg");
imagedestroy($rotate);
}