【问题标题】:How do I get Image Data from an Image Resource?如何从图像资源中获取图像数据?
【发布时间】:2012-06-09 17:24:45
【问题描述】:

我正在使用 Microsoft Azure 云,需要在那里上传图像。它的类上传方法 putBlob() 和 putBlobData() 需要数据本身(不是资源)或目录字符串作为参数,在图像实际写入 Blob 之前,这些方法都不可用。

$fp = fopen($tmp_name, 'r');
$data = fread($fp, filesize($tmp_name));
fclose($fp);

//Setup watermark destination
$new_watermarked_image_name = "watermark.jpg";

// Create image resources
$image = imagecreatefromstring($data); 
$watermark = imagecreatefrompng('images/watermark_large.png');
$copyright = imagecreatefrompng('images/copyright.png');

// Merge image resource s
$image = overlay_watermark_full_size($image, $watermark);  
$image = overlay_watermark_lower_right($image, $copyright);
imagejpeg($image, $new_watermarked_image_name, 100);

//put original image
$AzureStorageBlob->putBlob("uploads", "name", $tmp_name);
//put watermarked image
$AzureStorageBlob->putBlobData("uploads", "name", ?); // ? needs to be data

【问题讨论】:

  • 所以您是说您需要来自imagejpeg() 的二进制数据,但它却被写入输出缓冲区?请参阅examples in the docs,它使用ob_start()ob_get_clean() 将其存储到变量中。

标签: php azure upload


【解决方案1】:

您需要使用 ob_start 来捕获缓冲区,例如:

ob_start();
imagejpeg($tmp_img);
$i = ob_get_clean(); 

$i 是你的图像块

【讨论】:

  • 当我删除 imagejpeg(目标)的第二个参数时,var_dump 起作用了。谢谢。
  • 这正是我一直在寻找的,很棒的家伙!
【解决方案2】:

通过使用最新的SDK for PHP,您只需传递图像流即可:

$image_stream = fopen($tmp_name, 'r');
// Check README.md of how to create $blobRestProxy
$blobRestProxy->createBlockBlob('container_name', 'my_image', $image_stream);

如果您还有其他问题,请告诉我

【讨论】:

  • putBlob 不需要图片流: //put original image $AzureStorageBlob->putBlob("uploads", "name", $tmp_name);我的问题是://放水印图像 $AzureStorageBlob->putBlobData("uploads", "name", ?); // ?必须是数据。请记住,我没有用于动态生成的水印的目录,可用作 putBlob 中的参数。所以我必须使用 putBlobData,我没有的数据。
  • 我不太明白这个问题。首先,你有什么?变量中的图像数据?图像的路径?与图像一起流式传输?
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多