[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 メーリングリストの案内