Как я изменяю размеры pngs с прозрачностью в PHP?

Я заметил, что ответы Mark и sehe's не делают --follow файлы, то есть останавливаются, как только они достигают переименования файла. Этот сценарий будет намного медленнее, но будет работать для этой цели.

git ls-files |
while read aa
do
  printf . >&2
  set $(git log --follow --oneline "$aa" | wc)
  printf '%s\t%s\n' $1 "$aa"
done > bb
echo
sort -nr bb
rm bb

git-most.sh

40
задан Ryan Doherty 11 November 2008 в 09:59
поделиться

3 ответа

Из того, что я могу сказать, необходимо установить режим наложения на false и флаг альфа-канала сохранения к true прежде , Вы делаете imagecolorallocatealpha ()

<?php
 $newImg = imagecreatetruecolor($nWidth, $nHeight);
 imagealphablending($newImg, false);
 imagesavealpha($newImg,true);
 $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
 imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent);
 imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight,
                      $imgInfo[0], $imgInfo[1]);
?>

ОБНОВЛЕНИЕ : Этот код работает только над фоном, прозрачным с непрозрачностью = 0. Если Ваше изображение имеет 0 < непрозрачность < 100 это будет черный фон.

77
ответ дан Castro Roy 23 September 2019 в 16:17
поделиться

Заполнение нового изображения с прозрачным цветом также требуется (как кодированный Dycey, но я предполагаю, забыл упоминать:)), не только 'стратегическое' сохранение отдельно.

IIRC, также необходимо быть уверены, что PNGs составляют 24 бита, т.е. истинный цвет, и не 8 битов для предотвращения ошибочного поведения.

4
ответ дан jTresidder 23 September 2019 в 16:17
поделиться

старый поток, но на всякий случай - пример Дайси должен работать, если вы правильно называете вещи. Вот модифицированная версия, используемая в моем классе изменения размера изображения. Обратите внимание на проверку, чтобы убедиться, что imagecolorallocatealpha () определен, чего не будет, если вы используете GD <2.0.8

  /**
     * usually when people use PNGs, it's because they need alpha channel 
     * support (that means transparency kids). So here we jump through some 
     * hoops to create a big transparent rectangle which the resampled image 
     * will be copied on top of. This will prevent GD from using its default 
     * background, which is black, and almost never correct. Why GD doesn't do 
     * this automatically, is a good question.
     *
     * @param $w int width of target image
     * @param $h int height of target image
     * @return void
     * @private
     */
    function _preallocate_transparency($w, $h) {
        if (!empty($this->filetype) && !empty($this->new_img) && $this->filetype == 'image/png')) {
            if (function_exists('imagecolorallocatealpha')) {
                imagealphablending($this->new_img, false);
                imagesavealpha($this->new_img, true);
                $transparent = imagecolorallocatealpha($this->new_img, 255, 255, 255, 127);
                imagefilledrectangle($this->new_img, 0, 0, $tw, $th, $transparent);
            }
        }
    }
4
ответ дан 27 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

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