用PHP生成相对百分比水印

在PHP的水印生成过程中,许多时候不知道图片的尺寸,从而无法确定imagettftext中应该传入多大的字体。


1、首先了解imagettftext函数

2、从1了解,imagegettftext在GD2和GD1中使用的计量单位是不一样的。GD1使用的以像素单位,GD2则是为磅。

  1. 1磅==>4像素, PPI=288  
  2. 2磅==>5像素, PPI=180  
  3. 3磅==>7像素, PPI=168  
  4. 4磅==>8像素, PPI=144  
  5. 5磅==>9像素, PPI=129.6  
  6. 6磅==>10像素, PPI=120  
  7. 7磅==>11像素, PPI=113.14285714286  
  8. 8磅==>12像素, PPI=108  
  9. 9磅==>14像素, PPI=112  
  10. 10磅==>15像素, PPI=108  
  11. 11磅==>16像素, PPI=104.72727272727  
  12. 12磅==>17像素, PPI=102  
  13. 13磅==>18像素, PPI=99.692307692308  
  14. 14磅==>19像素, PPI=97.714285714286  
  15. 15磅==>21像素, PPI=100.8  
  16. 16磅==>22像素, PPI=99  
  17. 17磅==>23像素, PPI=97.411764705882  
  18. 18磅==>25像素, PPI=100  
  19. 19磅==>26像素, PPI=98.526315789474  
  20. 20磅==>27像素, PPI=97.2  
  21. 21磅==>28像素, PPI=96  
  22. 22磅==>29像素, PPI=94.909090909091  
  23. 23磅==>30像素, PPI=93.913043478261  
  24. 24磅==>32像素, PPI=96  
  25. 25磅==>33像素, PPI=95.04  
  26. 26磅==>34像素, PPI=94.153846153846  
  27. 27磅==>35像素, PPI=93.333333333333  
  28. 28磅==>36像素, PPI=92.571428571429  
  29. 29磅==>38像素, PPI=94.344827586207  
  30. 30磅==>39像素, PPI=93.6  
  31. 31磅==>40像素, PPI=92.903225806452  
  32. 32磅==>41像素, PPI=92.25  
  33. 33磅==>43像素, PPI=93.818181818182  
  34. 34磅==>44像素, PPI=93.176470588235  
  35. 35磅==>46像素, PPI=94.628571428571  
  36. 36磅==>47像素, PPI=94  
  37. 37磅==>48像素, PPI=93.405405405405  
  38. 38磅==>48像素, PPI=90.947368421053  
  39. 39磅==>50像素, PPI=92.307692307692  
  40. 40磅==>51像素, PPI=91.8  
  41. 41磅==>52像素, PPI=91.317073170732  
  42. 42磅==>53像素, PPI=90.857142857143  
  43. 43磅==>55像素, PPI=92.093023255814  
  44. 44磅==>56像素, PPI=91.636363636364  
  45. 45磅==>57像素, PPI=91.2  
  46. 46磅==>58像素, PPI=90.782608695652  
  47. 47磅==>60像素, PPI=91.914893617021  
  48. 48磅==>62像素, PPI=93  
  49. 49磅==>63像素, PPI=92.571428571429  
  50. 50磅==>63像素, PPI=90.72  
  51. 51磅==>64像素, PPI=90.352941176471  
  52. 52磅==>67像素, PPI=92.769230769231  
  53. 53磅==>68像素, PPI=92.377358490566  
  54. 54磅==>69像素, PPI=92  
  55. 55磅==>70像素, PPI=91.636363636364  
  56. 56磅==>71像素, PPI=91.285714285714  
  57. 57磅==>72像素, PPI=90.947368421053  
  58. 58磅==>74像素, PPI=91.862068965517  
  59. 59磅==>75像素, PPI=91.525423728814  
  60. 60磅==>76像素, PPI=91.2  
  61. 61磅==>77像素, PPI=90.885245901639  
  62. 62磅==>78像素, PPI=90.58064516129  
  63. 63磅==>79像素, PPI=90.285714285714  
  64. 64磅==>81像素, PPI=91.125  
  65. 65磅==>83像素, PPI=91.938461538462  
  66. 66磅==>84像素, PPI=91.636363636364  
  67. 67磅==>85像素, PPI=91.34328358209  
  68. 68磅==>86像素, PPI=91.058823529412  
  69. 69磅==>86像素, PPI=89.739130434783  
  70. 70磅==>88像素, PPI=90.514285714286  
  71. 71磅==>90像素, PPI=91.267605633803  
  72. 72磅==>91像素, PPI=91  
  73. 73磅==>92像素, PPI=90.739726027397  
  74. 74磅==>93像素, PPI=90.486486486486  

这里以GD2为例,写了一个粗略的方法转换方法。

/**

 *  @param text  水印文字

 *  @param file  图片路径

 *  @param percent  百分比

 */

function getfontSize($text,$file,$percent = 70){

$fileData = getimagesize($file); //获取图片尺寸 
$fileWidth = $fileData[0];                //获取文件宽度
$percent = $percent / 100; //转换成小数位
$fontsize = $fileWidth / ($percent * 1.5 * strlen($text));    //计算文字磅数 。 算法和1.5是在下通过粗略计算得出的。过程就不给了 
return intval($fontsize);             //从上面可以看出磅数是取整数,所以这里取整
}//end getfontSize()

你可能感兴趣的:(用PHP生成相对百分比水印)