2012-06-09 3 views
2

Я работаю с облаком 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 
+0

Итак, вы говорите, что вам нужны двоичные данные из 'imagejpeg()', но вместо этого они записываются в выходной буфер? См. [Примеры в документах] (http://php.net/manual/en/function.imagejpeg.php), которые используют 'ob_start()' и 'ob_get_clean()' для хранения его в переменной. –

+0

Это был ответ –

ответ

2

Вы должны захватить буфер ob_start, что-то вроде:

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

$ я ваш образ блоб

+0

var dump of $ i пуст –

+0

Когда я удалил второй аргумент imagejpeg (destination), var_dump работал. Спасибо. –

+0

Это совершенно то, что я искал, удивительный чувак! – Heitor

0

Используя новейшие 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); 

Дайте мне знать, если у вас есть дополнительные вопросы

+0

Мне не нужен поток изображений для putBlob: // положить исходное изображение $ AzureStorageBlob-> putBlob ("uploads", "name", $ tmp_name); Моя проблема: // положить водяное изображение $ AzureStorageBlob-> putBlobData ("uploads", "name",?); //? должны быть данные. Помните, что у меня нет каталога для создания водяного знака, который можно использовать в качестве аргумента в putBlob. Поэтому я должен использовать putBlobData, данные которой у меня отсутствуют. –

+0

Я не очень понимаю проблему. Прежде всего, что у вас есть? Данные изображения в переменной? путь к изображению? поток с изображением? – Ogail

Смежные вопросы