как установить непрозрачность на изображении PHP [duplicate]

Мы используем геттеры и сеттеры:

  • для повторного использования
  • для выполнения проверки на более поздних этапах программирования

Геттер и сеттер методы - это публичные интерфейсы для доступа к частным членам класса.


Мантрация инкапсуляции

Мантра инкапсуляции должна делать частные и общедоступные поля.

Методы Getter: Мы можем получить доступ к закрытым переменным.

Setter Methods: Мы можем изменить частные поля.

Несмотря на то, что методы getter и setter не добавляют новых функциональных возможностей, мы можем изменить наш ум позже, чтобы лучше сделать этот метод

  • ;
  • более безопасным; и
  • быстрее.

В любом месте можно использовать значение, которое возвращает это значение. Вместо:

int x = 1000 - 500

используйте

int x = 1000 - class_name.getValue();

В терминах непрофессионала

Representation of "Person" class [/g5]

Предположим, нам нужно сохранить детали этого Person. Это Person имеет поля name, age и sex. Для этого необходимо создать методы для name, age и sex. Теперь, если нам нужно создать другого человека, необходимо снова создать методы для name, age, sex.

Вместо этого мы можем создать компонент class(Person) с методами геттера и сеттера. Поэтому завтра мы можем просто создавать объекты этого Bean class(Person class), когда нам нужно добавить нового человека (см. Рисунок). Таким образом, мы повторно используем поля и методы класса bean, что намного лучше.

5
задан RobertHegeraad 22 January 2013 в 23:33
поделиться

3 ответа

Нет прямого способа изменить непрозрачность с помощью функции DG (на самом деле есть ). Но это можно сделать с помощью пиксельных манипуляций:

/**
 * @param resource $imageSrc Image resource. Not being modified.
 * @param float $opacity Opacity to set from 0 (fully transparent) to 1 (no change)
 * @return resource Transparent image resource
 */
function imagesetopacity( $imageSrc, $opacity )
{
    $width  = imagesx( $imageSrc );
    $height = imagesy( $imageSrc );

    // Duplicate image and convert to TrueColor
    $imageDst = imagecreatetruecolor( $width, $height );
    imagealphablending( $imageDst, false );
    imagefill( $imageDst, 0, 0, imagecolortransparent( $imageDst ));
    imagecopy( $imageDst, $imageSrc, 0, 0, 0, 0, $width, $height );

    // Set new opacity to each pixel
    for ( $x = 0; $x < $width; ++$x )
        for ( $y = 0; $y < $height; ++$y ) {
            $pixelColor = imagecolorat( $imageDst, $x, $y );
            $pixelOpacity = 127 - (( $pixelColor >> 24 ) & 0xFF );
            if ( $pixelOpacity > 0 ) {
                $pixelOpacity = $pixelOpacity * $opacity;
                $pixelColor = ( $pixelColor & 0xFFFFFF ) | ( (int)round( 127 - $pixelOpacity ) << 24 );
                imagesetpixel( $imageDst, $x, $y, $pixelColor );
            }
        }

    return $imageDst;
}

$source = imagecreatefrompng( 'my_image.png' );
$newImage = imagesetopacity( $source, 0.5 );
imagedestroy( $source );

header( 'Content-Type: image/png' );
imagepng( $newImage );
imagedestroy( $newImage );
4
ответ дан Community 24 August 2018 в 03:43
поделиться

Вы пробовали настройку альфа-смешивания на true?

imagealphablending($newImage,true);

0
ответ дан kurdtpage 24 August 2018 в 03:43
поделиться

Вам просто нужно использовать imagefilter с IMG_FILTER_COLORIZE

$image = imagecreatefrompng('my_image.png');
$opacity = 0.5;
imagealphablending($image, false); // imagesavealpha can only be used by doing this for some reason
imagesavealpha($image, true); // this one helps you keep the alpha. 
$transparency = 1 - $opacity;
imagefilter($image, IMG_FILTER_COLORIZE, 0,0,0,127*$transparency); // the fourth parameter is alpha
header('Content-type: image/png');
imagepng($image);

imagealphablending, я думаю, для целей рисования, поэтому вы не хотите его использовать. Возможно, я ошибаюсь. Мы должны посмотреть на него:)

Если вы хотите использовать процент, вы можете вычислить $opacity соответственно.

10
ответ дан Praveen 24 August 2018 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: