`
javasee
  • 浏览: 965622 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java版颈椎自动矫正图

阅读更多

本来上周双休日没什么事情,准备干点遗留了很久的正经事,结果半途忍不住手贱看新闻,于是被11.28事件触动,随大流的针对棒子及棒子粉抽疯了两天。

没想到到星期一上班脖子就不得劲,顺便查了点资料,发现个山寨版的颈椎矫正图,觉得挺有意思。

如下图:



于是回家后想到自己也做个玩。

问题是,咱爷们不说程序员吧,好歹也是个垒码的,直接PS文字图未免有碍观瞻,于是抽空写了个Java自动生成版的。

代码如下:

  1. packageorg.test;

  2. importjava.awt.AlphaComposite;
  3. importjava.awt.Canvas;
  4. importjava.awt.Color;
  5. importjava.awt.Font;
  6. importjava.awt.Frame;
  7. importjava.awt.Graphics;
  8. importjava.awt.Graphics2D;
  9. importjava.awt.Image;
  10. importjava.awt.RenderingHints;
  11. importjava.awt.event.WindowAdapter;
  12. importjava.awt.event.WindowEvent;
  13. importjava.awt.image.BufferedImage;
  14. importjava.io.File;
  15. importjava.io.IOException;

  16. importjavax.imageio.ImageIO;

  17. /**
  18. *Copyright2008
  19. *
  20. *LicensedundertheApacheLicense,Version2.0(the"License");youmaynot
  21. *usethisfileexceptincompliancewiththeLicense.Youmayobtainacopyof
  22. *theLicenseat
  23. *
  24. *http://www.apache.org/licenses/LICENSE-2.0
  25. *
  26. *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
  27. *distributedundertheLicenseisdistributedonan"ASIS"BASIS,WITHOUT
  28. *WARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.Seethe
  29. *Licenseforthespecificlanguagegoverningpermissionsandlimitationsunder
  30. *theLicense.
  31. *
  32. *@projectloonframework
  33. *@authorchenpeng
  34. *@email:ceponline@yahoo.com.cn
  35. *@version0.1
  36. */
  37. publicclassMessageImageextendsCanvas{

  38. /**
  39. *
  40. */
  41. privatestaticfinallongserialVersionUID=1L;

  42. privateBufferedImagefontImage;

  43. privateGraphics2Dg2d;
  44. privateImagebackImage;
  45. finalstaticprivateintWIDTH=600;

  46. finalstaticprivateintHEIGHT=480;


  47. publicMessageImage(finalStringmessages){

  48. fontImage=newBufferedImage(WIDTH,HEIGHT,2);
  49. g2d=fontImage.createGraphics();
  50. try{
  51. backImage=ImageIO.read(newFile("back.png"));
  52. }catch(IOExceptione){
  53. e.printStackTrace();
  54. }
  55. g2d.drawImage(backImage,0,0,null);
  56. setAlpha(g2d,0.7);
  57. intsize=25;
  58. intnewLine=(WIDTH/size)-10;
  59. char[]messageChars=messages.toCharArray();
  60. booleand=true;
  61. StringBuildersbr=newStringBuilder();
  62. intcount=0;
  63. intlen=messageChars.length-1;
  64. StringfontStyle="幼圆";
  65. Colorcolor=Color.white;
  66. for(inti=0,j=0;i<=len;i++,j++){
  67. sbr.append(messageChars[i]);
  68. if(j==newLine||(messageChars[i]=='\n')){
  69. g2d.drawImage(createImageMessages(1,false,sbr.toString(),
  70. color,fontStyle,1,size,d),count+=30,
  71. (HEIGHT-(sbr.length()*size))-(size*4),null);
  72. d=!d;
  73. sbr.delete(0,sbr.length());
  74. j=0;
  75. }elseif(i==len){
  76. g2d.drawImage(createImageMessages(1,false,sbr.toString(),
  77. color,fontStyle,1,size,d),count+=30,
  78. (HEIGHT-(sbr.length()*size))-(size*4),null);
  79. }
  80. }
  81. setAlpha(g2d,0.6);
  82. Stringmes="Java版颈椎自动矫正图";
  83. fontStyle="华文新魏";
  84. size=20;
  85. g2d.drawImage(createImageMessages(0,true,mes,Color.red,fontStyle,
  86. 1,size,false),WIDTH-(mes.length()*size)-(size*2),
  87. HEIGHT-(size*2),null);
  88. }

  89. /**
  90. *创建一组图片文字
  91. *
  92. *@paramaspect
  93. *@paramisRow
  94. *@parammessages
  95. *@paramcolor
  96. *@paramname
  97. *@paramstyle
  98. *@paramsize
  99. *@paramd
  100. *@return
  101. */
  102. publicstaticBufferedImagecreateImageMessages(finalintaspect,
  103. finalbooleanisRow,finalStringmessages,finalColorcolor,
  104. finalStringname,finalintstyle,finalintsize,finalbooleand){
  105. finalintflength=messages.length();
  106. finalintnowSize=size*flength;
  107. BufferedImagefontImages;
  108. if(isRow)
  109. fontImages=newBufferedImage(nowSize,size,2);
  110. else
  111. fontImages=newBufferedImage(size,nowSize,2);
  112. Graphics2Dgraphics2d=fontImages.createGraphics();
  113. char[]messageChars=messages.toCharArray();
  114. if(d){
  115. char[]temp=newchar[flength];
  116. for(inti=0,j=flength-1;i<flength;i++,j--){
  117. temp[j]=messageChars[i];
  118. }
  119. messageChars=temp;
  120. }
  121. if(isRow)
  122. for(inti=0;i<flength;i++){
  123. graphics2d.drawImage(createImageMessage(aspect,
  124. messageChars[i],color,name,style,size,d),
  125. i*size,0,null);
  126. }
  127. else
  128. for(inti=0;i<flength;i++){
  129. graphics2d.drawImage(createImageMessage(aspect,
  130. messageChars[i],color,name,style,size,d),0,i
  131. *size,null);
  132. }
  133. graphics2d.dispose();
  134. System.gc();
  135. returnfontImages;
  136. }

  137. /**
  138. *创建单独图片文字
  139. *
  140. *@paramaspect
  141. *@parammessage
  142. *@paramcolor
  143. *@paramname
  144. *@paramstyle
  145. *@paramsize
  146. *@paramd
  147. *@return
  148. */
  149. publicstaticBufferedImagecreateImageMessage(finalintaspect,
  150. finalcharmessage,finalColorcolor,finalStringname,
  151. finalintstyle,finalintsize,finalbooleand){
  152. finalintnowSize=size+1;
  153. BufferedImagefontImage=newBufferedImage(nowSize,nowSize,2);
  154. Graphics2Dgraphics2d=fontImage.createGraphics();
  155. graphics2d.setColor(color);
  156. graphics2d.setFont(newFont(name,style,size));
  157. //设定图像显示状态
  158. RenderingHintshints=newRenderingHints(
  159. RenderingHints.KEY_TEXT_ANTIALIASING,
  160. RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  161. hints.put(RenderingHints.KEY_DITHERING,
  162. RenderingHints.VALUE_DITHER_ENABLE);
  163. hints.put(RenderingHints.KEY_RENDERING,
  164. RenderingHints.VALUE_RENDER_SPEED);
  165. hints.put(RenderingHints.KEY_ANTIALIASING,
  166. RenderingHints.VALUE_ANTIALIAS_ON);
  167. hints.put(RenderingHints.KEY_FRACTIONALMETRICS,
  168. RenderingHints.VALUE_FRACTIONALMETRICS_ON);
  169. hints.put(RenderingHints.KEY_COLOR_RENDERING,
  170. RenderingHints.VALUE_COLOR_RENDER_QUALITY);
  171. hints.put(RenderingHints.KEY_DITHERING,
  172. RenderingHints.VALUE_DITHER_DISABLE);
  173. graphics2d.setRenderingHints(hints);
  174. graphics2d.drawString(String.valueOf(message),0,size-3);
  175. graphics2d.dispose();
  176. switch(aspect){
  177. case0:
  178. break;
  179. case1:
  180. fontImage=MessageImage.rotateImage(fontImage,90,d);
  181. break;
  182. case2:
  183. fontImage=MessageImage.rotateImage(fontImage,180,d);
  184. break;
  185. case3:
  186. fontImage=MessageImage.rotateImage(fontImage,360,d);
  187. break;
  188. }
  189. returnfontImage;
  190. }

  191. publicvoidpaint(Graphicsg){
  192. g.drawImage(fontImage,0,0,null);
  193. }

  194. /**
  195. *水平翻转当前图像
  196. *
  197. *@return
  198. */
  199. publicstaticBufferedImagerotateImage(finalBufferedImageimage){
  200. intw=image.getWidth();
  201. inth=image.getHeight();
  202. BufferedImageimg;
  203. Graphics2Dgraphics2d;
  204. (graphics2d=(img=newBufferedImage(w,h,image.getColorModel()
  205. .getTransparency())).createGraphics()).drawImage(image,0,0,
  206. w,h,w,0,0,h,null);
  207. graphics2d.dispose();
  208. returnimg;
  209. }

  210. /**
  211. *旋转图像为指定角度
  212. *
  213. *@paramdegree
  214. *@return
  215. */
  216. publicstaticBufferedImagerotateImage(finalBufferedImageimage,
  217. finalintangdeg,finalbooleand){
  218. intw=image.getWidth();
  219. inth=image.getHeight();
  220. inttype=image.getColorModel().getTransparency();
  221. BufferedImageimg;
  222. Graphics2Dgraphics2d;
  223. (graphics2d=(img=newBufferedImage(w,h,type)).createGraphics())
  224. .setRenderingHint(RenderingHints.KEY_INTERPOLATION,
  225. RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  226. graphics2d.rotate(d?-Math.toRadians(angdeg):Math.toRadians(angdeg),
  227. w/2,h/2);
  228. graphics2d.drawImage(image,0,0,null);
  229. graphics2d.dispose();
  230. returnimg;
  231. }

  232. finalstaticpublicvoidsetAlpha(finalGraphics2Dg,finaldoubled){
  233. AlphaCompositealphacomposite=AlphaComposite
  234. .getInstance(3,(float)d);
  235. g.setComposite(alphacomposite);
  236. }

  237. publicstaticvoidmain(String[]args){
  238. java.awt.EventQueue.invokeLater(newRunnable(){
  239. publicvoidrun(){
  240. Frameframe=newFrame();
  241. frame.addWindowListener(newWindowAdapter(){
  242. publicvoidwindowClosing(WindowEvente){
  243. System.exit(0);
  244. }
  245. });
  246. frame
  247. .add(newMessageImage(
  248. "每天面对计算机\n不是垒码、就是泡论坛、再不然就是和脑残作斗争,爆个哈韩吧,攻击个棒子网什么的,再闲时就写写Blog,转转Google,"
  249. +"总之24小时离不开电脑,离不开网络(已被纳入我国精神病症状|||),长时间不活动,这颈椎可怎么受的了?没办法,想点办法解决吧。"
  250. +"最近有人说图片能治疗颈椎病,我却偏不信那个邪,就几句话能费人多大的力气去看?说到底还真能累死活人不成?"
  251. +"这左转右绕上窜下跳的,除了费点眼睛,怎么可能把脖子一块运动起来?您说是不是这道理?"));
  252. frame.setSize(WIDTH+5,HEIGHT+25);
  253. frame.setResizable(false);
  254. frame.setTitle("Java版颈椎自动矫正图");
  255. frame.setLocationRelativeTo(null);
  256. frame.setVisible(true);
  257. }
  258. });
  259. }

  260. }



效果图如下:



仔细说起来,这就和各大小说门户生成图片版小说的原理一般无二,毫无技术难度可言,不过毕竟写了,也就丢出来在Blog凑个数。

那位有时间的话(或者等以后鄙人闲的没事),可以做个自动导出,弄套资治通鉴全文之类的图片做颈椎矫正,试验下连续的看完整本颈椎是轻松了,还是碎掉了……




分享到:
评论

相关推荐

    人体颈椎X光图片数据集

    颈椎X光图片数据集是深度学习和医学图像领域的重要资源,它包含五百多张人体颈椎的X光图像,这些图像可以用于训练和测试各种算法,尤其是那些基于深度学习的模型。在医疗诊断、疾病预测以及治疗规划中,精确的图像...

    防治颈椎病的图片.jpg

    老是趴电脑,可要注意了; 颈椎要活动,不要生病了。

    颈椎病防治颈椎病防治手册

    ### 颈椎病防治手册知识点详析 #### 一、颈椎病的定义与流行情况 颈椎病(Cervical Spondylosis)是一种常见的疾病,患病率大约为3.8%-17.6%,男性患者略多于女性患者,比例约为6:1。根据第二届全国颈椎病专题座谈...

    定时做颈椎操

    1. **定时提醒**:软件能够根据用户设定的时间间隔,如每小时或每两小时,自动提醒用户进行颈椎操。这样可以确保用户不会因为忙碌而忘记做操。 2. **动作指导**:`action.png`可能是一个展示颈椎操动作的图片或动画...

    行业文档-设计装置-一种矫正治疗颈椎病的牵引装置.zip

    设计和应用矫正治疗颈椎病的牵引装置是医疗技术领域的重要进步,它能够帮助患者缓解疼痛,改善颈椎功能。本文将深入探讨这种牵引装置的设计原理、工作方式以及在治疗颈椎病中的作用。 牵引疗法是一种历史悠久的治疗...

    行业分类-设备装置-预防颈椎病自动控制左右方向移动平台.zip

    标题中的“行业分类-设备装置-预防颈椎病自动控制左右方向移动平台”表明这是一个与医疗健康和机械设备相关的项目,特别关注预防颈椎病的功能。设备通过自动控制左右方向的移动,旨在帮助用户改善颈部运动,减轻颈椎...

    基于重力感应芯片的智能坐姿矫正眼镜研究.pdf

    为了应对这一问题,温州医学院的研究团队设计出了一种智能坐姿矫正眼镜,旨在通过技术手段帮助人们预防颈椎病。这种眼镜的核心技术是MMA7260重力感应芯片,这种芯片基于压电效应,可以将佩戴者头部的空间位置变化...

    颈椎操动图,七节操,GIF动图

    在"颈椎操动图GIF"这个压缩包文件中,很可能包含了一系列颈椎操的动作图解,以GIF动态图的形式呈现,使得用户能够更直观地理解和学习每个动作。动图通常比文字或静图更能生动地展示动作的连续性和正确姿势,帮助人们...

    行业文档-设计装置-预防颈椎病的自动控制升降平台.zip

    为了有效预防和减少颈椎病的发生,智能科技领域推出了一种预防颈椎病的自动控制升降平台,该平台的设计理念是通过科技手段改善工作环境,为用户提供一个健康的工作方式,减轻颈部的压力,提高工作效率和生活质量。...

    颈椎骨头3D分割数据集(nii.gz格式)

    颈椎骨头3D分割数据集是医学影像处理领域的一个宝贵资源,尤其对于研究颈椎疾病、骨骼结构分析以及机器学习算法在医疗图像识别中的应用至关重要。这个数据集包含31个独立的颈椎CT扫描样本,每个样本都经过专业人员...

    程序员颈椎保健操指南

    颈椎保健操是针对长期坐在电脑前工作的程序员们特别设计的一套运动,旨在缓解颈部压力,预防颈椎病。作为程序员,我们的工作性质往往使我们长时间保持同一姿势,这给颈椎带来了极大的负担,容易导致颈椎疲劳、僵硬...

    机器人辅助颈椎后路椎弓根螺钉置入手术治疗颈椎病的置钉精确度与临床疗效.pdf

    【标题】:“机器人辅助颈椎后路椎弓根螺钉置入手术治疗颈椎病的置钉精确度与临床疗效” 【摘要】:本研究探讨了使用机器人辅助颈椎后路椎弓根螺钉置入手术治疗颈椎病的精确度及临床效果,并与传统徒手手术进行了...

    摇头摆脑 颈椎病预防治疗大师 1.0.5 绿色版

    “颈椎病预防治疗大师”是世界上第一款,也是唯一一款预防和治疗颈椎病的共享软件。使用他可以强制你每天按设定的频率转动你的脖子。通过每天坚持对脖子的锻炼,可以有效的预防“颈椎病”。  这一切都只要短短的3-4...

    程序员如何防止颈椎病??

    程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病程序员如何防止颈椎病...

    治疗颈椎病最好办法

    颈椎病是一种常见的疾病,主要影响颈部的骨骼、软组织和神经功能。颈椎病的发生与现代人的生活方式密切相关,长时间保持同一姿势、颈部劳损以及不良睡眠习惯都可能导致颈椎问题。治疗颈椎病的方法多种多样,其中非...

    颈椎前后路手术配合.ppt

    在现代医学实践中,颈椎病的治疗始终是一个挑战,尤其是对于那些颈椎间盘和椎间关节退行性变而导致脊髓、神经根、血管受损的患者。为了缓解症状,恢复功能,颈椎手术成为了这些患者的重要选择。本文将对颈椎前后路...

    颈椎病优化诊疗方案.doc

    颈椎病作为一种日益普遍的慢性疾病,其症状多样,对患者的日常生活和工作影响深远。本文针对颈椎病的优化诊疗方案进行详细阐述,力求为患者提供全面而系统的治疗建议。 在中医理论中,颈椎病被归属于“痹证”、“痿...

    新冠肺炎疫情期间基于“互联网 医疗”的认知行为方案对颈椎病颈痛患者的疗效分析.pdf

    【新冠肺炎疫情期间基于“互联网 医疗”的认知行为方案对颈椎病颈痛患者的疗效分析】 本文是一篇关于在新冠肺炎疫情期间,利用“互联网+医疗”模式实施的认知行为方案对颈椎病颈痛患者疗效的研究报告。该研究旨在...

Global site tag (gtag.js) - Google Analytics