[PHP-dev 779]gdImageCopyRotatedパッチ
keios
bok @ bbsbrain.ne.jp
2003年 6月 19日 (木) 15:01:08 JST
gdのgdImageCopyRotated使いたかったので、自作patch作りました。
たぶん私以外使うことが無いpatchだと思いますが公開いたします。
gd 2.0.8以降を必要とします。
void ImageCopyRotated ( resource dst_im, resource src_im, double dstX, double dstY,
int srcX, int srcY, int srcW, int srcH, int angle)
ImageCopyRotated()は、イメージの短形の部分を別のイメージに回転してコピーします。
dst_imは、コピー先のイメージで、src_imはコピー元のイメージIDです。
angleで指定した角度に回転させます。
サンプルソース test.jpgを読み込み90度回転してtest_90.jpgに保存
<?php
$im = ImageCreateFromJPEG("./test.jpg");
$X = imagesx ($im);
$Y = imagesy ($im);
$im2 = imagecreatetruecolor($Y,$X);
imagecopyrotated($im2,$im,$Y/2,$X/2,0,0,$X,$Y,90);
ImageDestroy($im);
ImageJPEG($im2,'./test_90.jpg',100);
ImageDestroy($im2);
?>
By Yoshihisa Inoue
###################################################################################
diff -cr ./ext/gd/gd.c ./new_ext/gd/gd.c
*** ./ext/gd/gd.c Thu May 15 11:25:59 2003
--- ./new_ext/gd/gd.c Thu Jun 19 13:37:46 2003
***************
*** 150,155 ****
--- 150,156 ----
PHP_FE(imagecreatetruecolor, NULL)
PHP_FE(imageistruecolor, NULL)
PHP_FE(imagetruecolortopalette, NULL)
+ PHP_FE(imagecopyrotated, NULL)
PHP_FE(imagesetthickness, NULL)
PHP_FE(imagefilledarc, NULL)
PHP_FE(imagefilledellipse, NULL)
***************
*** 776,781 ****
--- 777,822 ----
RETURN_TRUE;
}
+ /* }}} */
+
+ /*{{{ proto void ImageCopyRotated(gdImagePtr dst, gdImagePtr src, double dstX, double dstY, int srcX, int srcY, int srcW, int srcH, int angle)
+ Rotated Image Copy
+ */
+ PHP_FUNCTION(imagecopyrotated)
+ {
+ zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **AN ;
+ gdImagePtr im_dst, im_src;
+ double dstX, dstY;
+ int srcW, srcH, srcX, srcY, angle;
+
+ if (ZEND_NUM_ARGS() != 9 ||
+ zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH ,&AN) == FAILURE) {
+ ZEND_WRONG_PARAM_COUNT();
+ }
+
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
+
+ convert_to_double_ex(DX);
+ convert_to_double_ex(DY);
+ convert_to_long_ex(SX);
+ convert_to_long_ex(SY);
+ convert_to_long_ex(SW);
+ convert_to_long_ex(SH);
+ convert_to_long_ex(AN);
+
+ dstX = Z_DVAL_PP(DX);
+ dstY = Z_DVAL_PP(DY);
+ srcX = Z_LVAL_PP(SX);
+ srcY = Z_LVAL_PP(SY);
+ srcH = Z_LVAL_PP(SH);
+ srcW = Z_LVAL_PP(SW);
+ angle = Z_LVAL_PP(AN);
+
+ gdImageCopyRotated(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, angle);
+ RETURN_TRUE;
+ }
+
/* }}} */
#if HAVE_GD_BUNDLED
diff -cr ./ext/gd/php_gd.h ./new_ext/gd/php_gd.h
*** ./ext/gd/php_gd.h Mon Mar 31 17:49:30 2003
--- ./new_ext/gd/php_gd.h Thu Jun 19 13:37:52 2003
***************
*** 91,96 ****
--- 91,97 ----
#ifdef HAVE_LIBGD20
PHP_FUNCTION(imagecreatetruecolor);
PHP_FUNCTION(imagetruecolortopalette);
+ PHP_FUNCTION(imagecopyrotated);
PHP_FUNCTION(imagesetthickness);
PHP_FUNCTION(imagefilledellipse);
PHP_FUNCTION(imagefilledarc);
PHP-dev メーリングリストの案内