Добавьте путь svg к изображению, используя vips

Я использую PHP-библиотеку vips. Я хочу добавить путь svg к своему изображению. Я реализовал нижеприведенный код для этого, но он не дает ожидаемого результата. Проблема в том, как я могу установить путь svg в соответствии с фактической высотой и шириной изображения. Я попытался использовать изменение размера и миниатюру, но это не дает ожидаемого результата. Также я хочу заполнить серым цветом мои фактические блоки изображения, как в ожидаемом выходном изображении.

Ожидаемое выходное изображение, созданное с помощью imagick

$background = Vips\Image::newFromFile($arg[1], ['access' => 'sequential']);
$svg = Vips\Image::svgload_buffer('<svg>
  <path 
    d="M0 200 v-200 h200 
    a100,100 90 0,1 0,200
    a100,100 90 0,1 -200,0
    z" stroke="#fff" fill="transparent"/>
</svg>');
// $svg = $svg->resize(2.5);
$svg = $svg->thumbnail_image(700, ['height' => 700, 'size' => 'both']);
$image = $background->composite($svg, 'dest-in');
$image->writeToFile([$arg2], ['background' => [128, 128, 128], 'Q' => 100]);

Ниже приведено изображение, на которое я добавил свой путь svg введите здесь описание изображения

Выходное изображение моего vips введите здесь описание изображения

Ожидаемое выходное изображение введите здесь описание изображения


person Vinay Kapoor    schedule 16.09.2020    source источник


Ответы (1)


Пытаться:

#!/usr/bin/php
<?php

require __DIR__ . '/vendor/autoload.php';
use Jcupitt\Vips;

$background = Vips\Image::newFromFile($argv[1], ['access' => 'sequential']);
$width = $background->width;
$height = $background->height;
$svg = Vips\Image::svgload_buffer(<<<EOF
  <svg
    viewBox="0 0 300 300" 
    width="$width"
    height="$height">
    <path 
    d="M0 200 v-200 h200 
      a100,100 90 0,1 0,200
      a100,100 90 0,1 -200,0
      z" stroke="#fff" fill="white"/>
  </svg>
EOF);
$image = $background->colourspace('b-w')->composite($svg, 'dest-in');
$image->writeToFile($argv[2], ['background' => [128, 128, 128], 'Q' => 100]);

Связанная проблема с github: https://github.com/libvips/php-vips/issues/ 109

person jcupitt    schedule 16.09.2020
comment
Я добавил цветовое пространство «ч-б» на фоновое изображение, но это дало мне тот же результат, который я упомянул в приведенном выше выводе. Также, когда я применил viewBox=0 0 700 700, в svg ничего не изменилось. Я хочу настроить высоту и ширину svg в соответствии с высотой и шириной изображения. - person Vinay Kapoor; 16.09.2020