Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Функция DrawMask()
Метод DrawMask()
из пакета image/draw
позволяет скопировать фрагмент с одного изображения и наложить его на другое изображение с учетом маски. Формат функции:
draw.DrawMask(dst draw.Image, r image.Rectangle, src image.Image,
sp image.Point, mask image.Image, mp image.Point,
op draw.Op)
В параметре dst
указывается изображение, на которое будут скопирован фрагмент из изображения src
. Координаты места вставки скопированного фрагмента в изображение dst
задаются во втором параметре. Координаты начала копируемого фрагмента на изображении src
задаются параметром sp
. Параметр op
задает режим наложения в виде константы Over
или Src
:
type Op int
const draw.Over draw.Op = 0
const draw.Src draw.Op = 1
(draw.Op).Draw(dst draw.Image, r image.Rectangle,
src image.Image, sp image.Point)
В параметре mask
указывается изображение с маской, а в параметре mp
— координаты начала фрагмента на маске.
Пример использования функции DrawMask()
приведен в листинге 17.13.
Листинг 17.13. Функция DrawMask()
package main
import (
"fmt"
"image"
"image/color"
"image/draw"
"image/jpeg"
"os"
)
func main() {
// Загружаем изображение из файла
file, err := os.Open(`C:\book\photo.jpg`)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
src, err := jpeg.Decode(file)
if err != nil {
fmt.Println(err)
return
}
// Создаем новое изображение
dst := image.NewNRGBA(image.Rect(0, 0, 300, 300))
// Закрашиваем все изображение черным цветом
draw.Draw(dst, dst.Bounds(), image.Black, image.Point{}, draw.Src)
// Создаем маску круглой формы
mask := image.NewAlpha(image.Rect(0, 0, 200, 200))
for y, my := mask.Bounds().Min.Y, mask.Bounds().Max.Y; y < my; y++ {
for x, mx := mask.Bounds().Min.X,mask.Bounds().Max.X;x < mx;x++ {
xx := float64(x - 100) + 0.5
yy := float64(y - 100) + 0.5
rr := float64(100)
if xx * xx + yy * yy < rr * rr {
mask.SetAlpha(x, y, color.Alpha{255})
} else {
mask.SetAlpha(x, y, color.Alpha{0})
}
}
}
// Копируем фрагмент
r := image.Rect(10, 10, 210, 210)
draw.DrawMask(dst, r, src, image.Point{100, 100},
mask, image.Point{}, draw.Over)
// Сохраняем изображение в файл
file2, err := os.Create(`C:\book\img.jpg`)
if err != nil {
fmt.Println(err)
return
}
defer file2.Close()
err = jpeg.Encode(file2, dst, &jpeg.Options{Quality: 75})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Операция выполнена успешно")
}
Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов