Я использую GD для изменения размера и преобразования изображений, однако во время тестов я обнаружил странное поведение при преобразовании прозрачных PNG в JPEG. Согласно инструкции ImageAlphaBlending () включен по умолчанию, но для сохранения прозрачности я должен установить для ImageSaveAlpha () значение true (что, в свою очередь, требует, чтобы я установил ImageAlphaBlending () ложный). Так что правильный путь должен быть:
$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, false);
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);
Однако, если я сделаю это «правильным» образом, вся область прозрачности станет черной в JPEG. Это похоже на работу (JPEG с белым фоном на прозрачных областях) в моих тестах:
$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, true); // true by default, but still...
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);
Может кто-нибудь просветить меня по этому вопросу?