mirror of
https://github.com/php/php-src.git
synced 2024-12-13 03:44:17 +08:00
fix #65070, bgcolor does not use the same format as the input image with imagerotate
This commit is contained in:
parent
0a6ec7a2c9
commit
07e52857b5
@ -3044,7 +3044,7 @@ int gdImagePaletteToTrueColor(gdImagePtr src)
|
||||
for (x = 0; x < sx; x++) {
|
||||
const unsigned char c = *(src_row + x);
|
||||
if (c == src->transparent) {
|
||||
*(dst_row + x) = gdTrueColorAlpha(0, 0, 0, 127);;
|
||||
*(dst_row + x) = gdTrueColorAlpha(0, 0, 0, 127);
|
||||
} else {
|
||||
*(dst_row + x) = gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]);
|
||||
}
|
||||
@ -3061,6 +3061,12 @@ int gdImagePaletteToTrueColor(gdImagePtr src)
|
||||
src->pixels = NULL;
|
||||
src->alphaBlendingFlag = 0;
|
||||
src->saveAlphaFlag = 1;
|
||||
|
||||
if (src->transparent >= 0) {
|
||||
const unsigned char c = src->transparent;
|
||||
src->transparent = gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
clean_on_error:
|
||||
|
@ -1674,13 +1674,6 @@ gdImagePtr gdImageRotateNearestNeighbour(gdImagePtr src, const float degrees, co
|
||||
unsigned int i;
|
||||
gdImagePtr dst;
|
||||
|
||||
/* impact perf a bit, but not that much. Implementation for palette
|
||||
images can be done at a later point.
|
||||
*/
|
||||
if (src->trueColor == 0) {
|
||||
gdImagePaletteToTrueColor(src);
|
||||
}
|
||||
|
||||
dst = gdImageCreateTrueColor(new_width, new_height);
|
||||
if (!dst) {
|
||||
return NULL;
|
||||
@ -1736,12 +1729,6 @@ gdImagePtr gdImageRotateGeneric(gdImagePtr src, const float degrees, const int b
|
||||
f_slop_x > f_slop_y ? gd_divfx(f_slop_y, f_slop_x) : gd_divfx(f_slop_x, f_slop_y)
|
||||
: 0;
|
||||
|
||||
/* impact perf a bit, but not that much. Implementation for palette
|
||||
images can be done at a later point.
|
||||
*/
|
||||
if (src->trueColor == 0) {
|
||||
gdImagePaletteToTrueColor(src);
|
||||
}
|
||||
|
||||
dst = gdImageCreateTrueColor(new_width, new_height);
|
||||
if (!dst) {
|
||||
@ -1796,13 +1783,6 @@ gdImagePtr gdImageRotateBilinear(gdImagePtr src, const float degrees, const int
|
||||
unsigned int src_offset_x, src_offset_y;
|
||||
gdImagePtr dst;
|
||||
|
||||
/* impact perf a bit, but not that much. Implementation for palette
|
||||
images can be done at a later point.
|
||||
*/
|
||||
if (src->trueColor == 0) {
|
||||
gdImagePaletteToTrueColor(src);
|
||||
}
|
||||
|
||||
dst = gdImageCreateTrueColor(new_width, new_height);
|
||||
if (dst == NULL) {
|
||||
return NULL;
|
||||
@ -1922,13 +1902,6 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const
|
||||
unsigned int i;
|
||||
gdImagePtr dst;
|
||||
|
||||
/* impact perf a bit, but not that much. Implementation for palette
|
||||
images can be done at a later point.
|
||||
*/
|
||||
if (src->trueColor == 0) {
|
||||
gdImagePaletteToTrueColor(src);
|
||||
}
|
||||
|
||||
dst = gdImageCreateTrueColor(new_width, new_height);
|
||||
|
||||
if (dst == NULL) {
|
||||
@ -2177,11 +2150,21 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const
|
||||
gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor)
|
||||
{
|
||||
const int angle_rounded = (int)floor(angle * 100);
|
||||
|
||||
|
||||
if (bgcolor < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* impact perf a bit, but not that much. Implementation for palette
|
||||
images can be done at a later point.
|
||||
*/
|
||||
if (src->trueColor == 0) {
|
||||
if (bgcolor >= 0) {
|
||||
bgcolor = gdTrueColorAlpha(src->red[bgcolor], src->green[bgcolor], src->blue[bgcolor], src->alpha[bgcolor]);
|
||||
}
|
||||
gdImagePaletteToTrueColor(src);
|
||||
}
|
||||
|
||||
/* no interpolation needed here */
|
||||
switch (angle_rounded) {
|
||||
case 9000:
|
||||
|
Loading…
Reference in New Issue
Block a user