note 130017 added to image.examples-watermark

From: Date: Tue, 11 Feb 2025 10:00:47 +0000
Subject: note 130017 added to image.examples-watermark
Groups: php.notes 
Request: Send a blank email to php-notes+get-221839@lists.php.net to get a copy of this message
function addWatermark($sourceImage, $watermarkImage, $outputPath) { // Загружаем исходное изображение и водяной знак $source = imagecreatefromstring(file_get_contents($sourceImage)); $watermark = imagecreatefromstring(file_get_contents($watermarkImage)); // Получаем размеры изображений $sourceWidth = imagesx($source); $sourceHeight = imagesy($source); $watermarkWidth = imagesx($watermark); $watermarkHeight = imagesy($watermark); // Размер блока для анализа (можно настроить) $blockSize = max($watermarkWidth, $watermarkHeight); $darkestX = 0; $darkestY = 0; $darkestValue = 255; // Проходим по изображению блоками for ($x = 0; $x <= $sourceWidth - $blockSize; $x += $blockSize) { for ($y = 0; $y <= $sourceHeight - $blockSize; $y += $blockSize) { $totalBrightness = 0; $pixelCount = 0; // Вычисляем среднюю яркость блока for ($px = $x; $px < min($x + $blockSize, $sourceWidth); $px++) { for ($py = $y; $py < min($y + $blockSize, $sourceHeight); $py++) { $rgb = imagecolorat($source, $px, $py); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; // Вычисляем яркость пикселя $brightness = ($r + $g + $b) / 3; $totalBrightness += $brightness; $pixelCount++; } } $averageBrightness = $totalBrightness / $pixelCount; // Если это самый темный блок, сохраняем его координаты if ($averageBrightness < $darkestValue) { $darkestValue = $averageBrightness; $darkestX = $x; $darkestY = $y; } } } // Добавляем водяной знак в самую темную область imagecopy( $source, $watermark, $darkestX, $darkestY, 0, 0, $watermarkWidth, $watermarkHeight ); // Сохраняем результат switch (strtolower(pathinfo($outputPath, PATHINFO_EXTENSION))) { case 'jpg': case 'jpeg': imagejpeg($source, $outputPath, 90); break; case 'png': imagepng($source, $outputPath); break; case 'gif': imagegif($source, $outputPath); break; } // Освобождаем память imagedestroy($source); imagedestroy($watermark); } // Пример использования: $sourceImage = 'path/to/source.jpg'; $watermarkImage = 'path/to/watermark.png'; $outputPath = 'path/to/output.jpg'; addWatermark($sourceImage, $watermarkImage, $outputPath); ---- Server IP: 45.112.84.4 Probable Submitter: 80.90.5.137 (proxied: 5.144.78.129) ---- Manual Page -- https://php.net/manual/en/image.examples-watermark.php Edit -- https://main.php.net/note/edit/130017 Del: integrated -- https://main.php.net/note/delete/130017/integrated Del: useless -- https://main.php.net/note/delete/130017/useless Del: bad code -- https://main.php.net/note/delete/130017/bad+code Del: spam -- https://main.php.net/note/delete/130017/spam Del: non-english -- https://main.php.net/note/delete/130017/non-english Del: in docs -- https://main.php.net/note/delete/130017/in+docs Del: other reasons-- https://main.php.net/note/delete/130017 Reject -- https://main.php.net/note/reject/130017 Search -- https://main.php.net/manage/user-notes.php

« previous php.notes (#221839) next »