调整图像大小时的棘手数学问题

时间:2009-08-05 00:02:29

标签: php math image-manipulation

我有一张图像,我希望在其他图像的右下角添加水印。 水印图像的尺寸为179宽,39高。

现在如果我有另一张图片,其尺寸为150宽,20高?如果我们尝试使用原始图像对其进行水印,那么它显然会太大而且图像本身会被水印图像完全遮盖,对吧?

那么我如何确定一个较小的宽度和高度,我将调整水印图像的大小,远小于150宽度,20高度,这样它仍然会显示为水印并且不会完全遮盖图像?

3 个答案:

答案 0 :(得分:5)

您需要选择允许水印的较小图像的最大高度和宽度百分比,然后将水印图像缩放到这两个最大值中较小的一个。您的结果将根据目标图像是否高于宽图像而变化,反之亦然。

例如,如果您希望水印不超过目标图像宽度的25%且不超过目标图像宽度的50%,则可以看到如果将水印缩放到水印的大小应该是多大尺寸。

缩放到宽度的50%意味着水印将是75 x 16像素,这太高了(根据我任意选择的百分比)。

(75/179)* 39 = 16

缩放到25%的高度意味着水印为22 x 5。

(5/39)* 150 = 19

如果尺寸最终大于原始水印,则由您决定是否缩放水印 up 。与增加图像尺寸相比,图像质量在增加图像尺寸时降低得更快。

答案 1 :(得分:2)

首先,我建议您 生成一组不同大小的水印图像 ,而不是“动态”调整大小。

下面我概述了如何在网站上动态水印图像的工作流程:

设计好水印

首先,尝试设计具有透明背景的水印。这将大大降低掩盖目标图像的基本部分的风险。这可以通过使用gif或(优选地)png图像文件格式来完成。只需确保透明水印在浅色和深色背景下都能正常工作。

还要考虑如何最好地设计适用于纵向和横向风格图像的水印以及具有笨拙宽高比的图像。你应该考虑制作两个版本 - 一个用于宽图像,一个用于高图像。对于后一种类型,您可以将水印旋转90度,或者,如果水印由文本组成,您可能希望将文本拆分为两行或更多行。

预先渲染多种不同尺寸的水印

因此,不要动态调整水印大小,而是建议您渲染一组不同大小的水印图像。这只需要完成一次,它将大大提高水印的清晰度和/或易读性(特别是对于较小的目标图像)。

根据网页上图像的不同,您可能需要更大或更小的尺寸。这是一个你必须要做的设计选择,但我认为你可以只用两三种不同的尺寸。

应用水印

这将在服务器端动态发生(在您的php文件中)。首先使用getimagesize函数找出目标图像的尺寸。有了这些信息,您将必须根据大小,宽高比和方向决定使用哪个版本的水印。例如。

if ( $width > $height ) {$useLandscapeWatermark=true;}
if ( $width > 100 && $width < 400 ) {$watermarkSize=2;}

最后,要应用水印,我建议您查看gd library。这是一个功能强大的库,可以执行许多简洁的三重奏,其中包括合并两个图像。另一种选择是ImageMagic。

祝你好运!

答案 2 :(得分:1)

我可能会将水印缩放到水印图像的20%,或179x39,以最小者为准。