Для решения этой проблемы необходимо выполнить несколько шагов, но, конечно, это легко возможно. Ваш вопрос содержит различные задачи, которые должны быть решены:
- масштаб вниз входного изображения в данной области
- клипа это уменьшенное изображение
- место изображение масштабируется и прикрепляемый к заданной позиции. (Это было не совсем ясно из вашего вопроса, так что вы можете настроить Y параметры х/о fit_image() в зависимости от ваших потребностей
Это один из способов решить эту проблему:.
# Load the image
$image = $p->load_image("auto", $imagefile, "");
# First we retrieve the dimension and the resolution for the loaded image
$imagewidth = $p->info_image($image, "imagewidth", "");
$imageheight = $p->info_image($image, "imageheight", "");
$dpix = $p->info_image($image, "resx", "");
$dpiy = $p->info_image($image, "resy", "");
# Calculate the scale factor, to fit the image to a width/height of 70 x 21 mm.
# Use a helper function to calculate the mm-values to the PDF points
$scalex = mm2pt(70)/$imagewidth;
$scaley = mm2pt(21)/$imageheight;
# For demonstrating the correct placing, fit the loaded image with a
# size of 70x21 mm with a light opacity (scaling it to this dimension
# might distort the image ratio) (final code would not include this)
$gstate = $p->create_gstate("opacityfill=.4");
$optlist = sprintf("gstate=%d scale {%f %f} dpi=72",
$gstate, $scalex, $scaley);
$p->fit_image($image, mm2pt(10), mm2pt(250), $optlist);
# Use dpi=72 to ignore the internal DPI value and interpret each image
# pixel without scaling.
# Now, specify the partial area with a matchbox clipping (remember that
# those values are the positions within the 70x21, and y goes from bottom to top)
$optlist = sprintf("scale {%f %f} matchbox={clipping={%f %f %f %f}} dpi=72",
$scalex, $scaley, mm2pt(2)/$scalex, mm2pt(6)/$scaley,
mm2pt(22)/$scalex, mm2pt(18)/$scaley);
# Set the reference point, so the origin of the clipped image will be the
# same as for the original image
$p->fit_image($image, mm2pt(10)+mm2pt(2), mm2pt(250)+mm2pt(6), $optlist);
function mm2pt($mm){
return $mm*2.83465;
}
поэтому при использовании этого кода и одного из примеров PDFlib изображений, чтобы поместить частично изображение поверх исходного изображения, я получаю следующий вывод:
Я не вижу, где вы устанавливаете 3 мм над изображением и ширина/высота 20 и 12 мм? Я думаю, это в значительной степени цифры для отсечения я не понять ... – TheStoryCoder
Теперь это задумано. 3 мм вычитается из 21 мм, а значит 18 в качестве последнего значения отсечения. Ширина 20 мм добавляется слева от изображения, поэтому 22 в качестве третьего значения отсечения. Высота 12 мм - это разница между вторым и последним значением отсечения. – TheStoryCoder
ну, контрольная точка изображения - нижний левый угол. Оттуда вы должны сделать расчет. – Rainer