CODESHIF - 2018年12月 http://codeshif.com/2018/12/ 最有灵魂的开发者 EvaThumber截取图片失败,尺寸过大解决办法 http://codeshif.com/archives/27.html 2018-12-27T21:37:00+08:00 EvaThumber截取图片失败,尺寸过大解决办法找到/src/EvaThumber/Thumber.php文件,第509加入以下代码:// 防止尺寸过大,图片并没有裁切的尺寸大造成失败 if($crop > $imageWidth || $gravity > $imageHeight){ $min1 = min($crop,$gravity); $min2 = min($imageWidth, $imageHeight); if($min1 <= $min2){ $crop = $gravity = $min1; }else{ $crop = $gravity = $min2; } }然后就好了,如果给与的截取宽高大于图片的宽高,就取给与的最小值进行判断,如果最小值小于图片宽高,就用这个最小值作为基准进行截取图片。如果最小值大于图片宽高,就用图片的宽高最小值最为基准,进行裁切图片。 ApacheRewrite修改EvaThumber适应需要的URL http://codeshif.com/archives/26.html 2018-12-27T05:30:00+08:00 如何修改EvaThumber适应需要的URLEvaThumber的路径方式为:/thumb/d/image/20181225/1545744945770238,c_200,g_200.jpg期待的路径为:/thumb/d/image/20181225/1545744945770238.jpg?200x200修改办法:Apache Rewrite:#/yueyue/20170425/20170425103814_609844_10002_23252.png?200x200_130 #/thumb/d/image/20181225/1545744945770238,c_200,g_200.jpg RewriteCond %{QUERY_STRING} (\d+)x(\d+)_\d+ RewriteRule ^(thumb\/d\/[^\.]+)(\.\w+) index.php/$1,c_%1,g_%2$2判断QUERY_STRING最好还是用RewriteCond,然后在RewriteRule里面用%1或%N来表示找到的正则参数。最后记得在EvaThumber的index.php里面写入这个哦// 源码是通过PATH_INFO获取的数据的,所以要修改它 $_SERVER['REQUEST_URI'] = '/index.php' . $_SERVER['PATH_INFO'];当然了,在此之前你要测试URL的话:RewriteRule (thumb\/d\/[^\.]+)(\.\w+)\?(\d+)x(\d+)_\d+ index.php?ddd=$1,c_$3,g_$4$2 [QSA]然后建立个index.php<?php var_dump($_GET); Ubuntu Apache2开启Rewrite http://codeshif.com/archives/25.html 2018-12-25T19:56:00+08:00 首先执行a2enmod rewrite开启rewrite模块,然后编辑文件/etc/apache2/apache2.conf找到<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None #这里改成All即可 Require all granted </Directory>AllowOverride All然后service apache2 restart JavaScript substr、substring和slice的区别 http://codeshif.com/archives/24.html 2018-12-24T21:15:00+08:00 区别:substr第2参数是从第1参数后第几位,也就是Length如:s='abcdefg'; s.substr(0,3) // "abc" s.substr(2,3) // "cde"substring第2参数是实际字符串的第几位,但是!substring也是以两个参数中较小一个作为起始位置,较大的参数作为结束位置。如:s.substring(2,3) // "c" s.substring(2,5) // "cde" // 注意:有坑 s.substring(5,2) // "cde" slice和substring很像,但是区别在于负数slice的负数从尾部开始算,我们正常人类逻辑,但substring的负数干脆直接转为0!!如:s.slice(0,3) // "abc" s.slice(2,3) // "c" s.slice(2,-2) // 从开始2,到结尾2 // "cde" s.substring(2,-2) // 负数直接干成0,然后从0作为最小,2作为最大 // "ab" s.slice(-2,2) // "" s.substring(-2,2) // 负数直接干成0,然后从0作为最小,2作为最大 // "ab" s.substr(-2,3) // substr的第二参数是从第一开始数,所以根本不能为负数! // "fg" 总结substr和slice区别substr在于第二参数,也就是结束地址,substr结束地址是从第一参数后面开始数第几个!slice在于第二参数,也就是结束地址,slice结束地址是整个字符串的位置!substr和substring的区别substr第二参数的结束位置从第一参数开始数第几个,但是不能为负数!substring参数哪个小用哪个做开始,用大的做结束,且参数为负数直接变为0!!slice和substring区别slice在于第二参数,也就是结束地址,slice结束地址是整个字符串的位置!第二参数可为负数!substring参数哪个小用哪个做开始,用大的做结束,且参数为负数直接变为0!!不可为负数!完全总结substring 参数负数变0,且哪个小,就用哪个做起点,哪个大,就用做终点!substr 第二参数不能为负数,因为从第一参后开始数slice 第二参数可以是负数,他的第二参数是绝对地址 如何在NSTableView中的NSComboBoxCell添加值 http://codeshif.com/archives/23.html 2018-12-20T00:31:00+08:00 注意:在NSTableView中的NSComboBoxCell,每行中的该列是共享的,所以我们只需要对该列数据添加一次数据即可。第一种做法 Interface-Builder直接刚,注意 取消勾选 Uses Data Source第二种做法,使用 Value Selection注意选择Content Viewsself.comboBoxData就是你的AppDelegate中定义的一个属性咯。// 下拉框数据 @property (nonatomic,strong) NSArray* ComboBoxCellData; // 初始化下拉框数据 self.comboBoxCellData = @[@"text",@"textarea",@"password",@"datetime"];第三种做法,使用直接添加注意使用Interface-Builder将元素拖拽到代码里做个Outlet打开你的XIB文件选择双环将ComboBoxCell直接拖拽到你的AppDelegate属性区注意别弄错了,要弄Cell不是Column,之后你就可以直接添加数据给它了例如:[self.comboBoxCell addItemsWithObjectValues:@[@"text",@"textarea",@"password",@"datetime",@"hidden"]];第四种做法,使用NSComboBoxCellDataSource开启元素的Uses Data Source哦别忘了!这里说一下,XCode可以两种方式实现dataSource代码设置dataSource// 设置下拉框数据源 [self.comboBoxCell setDataSource:self];Interface-Builder拖拽实现dataSource设置好dataSource,然后在代码里实现NSComboBoxDataSource协议,例如:@interface AppDelegate () <NSComboBoxCellDataSource>设置数据@property (nonatomic,strong) NSArray* comboBoxCellData; // ... self.comboBoxCellData = @[@"text",@"textarea",@"password",@"datetime",@"hidden"];并实现以下接口,两个啊#pragma mark - #pragma mark ***** 表格下拉框的数据源 ***** // 填充下拉框数据大小 -(NSInteger)numberOfItemsInComboBoxCell:(NSComboBoxCell *)comboBoxCell{ return [self.comboBoxCellData count]; } // 获取下拉框数据 -(id)comboBoxCell:(NSComboBoxCell *)comboBoxCell objectValueForItemAtIndex:(NSInteger)index{ return [self.comboBoxCellData objectAtIndex:index]; } 然后就OK了其他如你所见我成功的设置了,很逼性是吧!当然了这个工具自己用啊废话不多说~当然了,愿意用哪种都行,哈哈操 Charles复制出的CURL无法导入PostMan http://codeshif.com/archives/22.html 2018-12-20T00:30:00+08:00 如图所示,复制CURL Request当复制出来的Charles CURL数据不能成功导入PostMan,如下所示这时候查看复制出来的数据:curl -H 'Host: xxx.com' -H 'Accept: application/json' -H 'User-Agent: kwai-ios' -H 'Accept-Language: zh-Hans-CN;q=1' --compressed 'http://xxx.com'问题出现在结尾网址,请将结尾网址提到最前面就可以了。curl 'http://xxx.com' -H 'Host: xxx.com' -H 'Accept: application/json' -H 'User-Agent: kwai-ios' -H 'Accept-Language: zh-Hans-CN;q=1' --compressed这样就OK了 PostMan从Charles复制CURL出来的不能成功执行 http://codeshif.com/archives/21.html 2018-12-20T00:27:00+08:00 从Charles导出来的CURL数据,修改后导入PostMan执行并不成功,如图所示:但是直接执行该代码在SHELL却是成功的!问题出现在哪里?检查了发现是代码参数里面的字段被编码了,怎么解决呢?直接打开Chrome,然后用decodeURIComponent(代码)即可,例如decodeURIComponent(`curl 'http://api.gifshow.com/rest/n/feed/hot?appver=5.11.1.750&did_gt=1536039663222&did=C7C4E156-7E68-42E7-A223-EF1DDA20892F&extId=b4e947c925be9624884ccd4c290233f2&c=a&ud=406159254&ver=5.11&sys=ios12.1&mod=iPhone10%2C3&net=%E4%B8%AD%E5%9B%BD%E8%81%94%E9%80%9A_5' -H 'Host: api.gifshow.com' -H 'X-REQUESTID: 1306738266' -H 'Accept: application/json' -H 'User-Agent: kwai-ios' -H 'Accept-Language: zh-Hans-CN;q=1' --data "__NStokensig=226dd3f2ac68ff24be93809824852a4afce71a2605b1277d3f6c0aa0798b1754&client_key=56c3713c&count=20&country_code=cn&id=17&language=zh-Hans-CN%3Bq%3D1&needInterestTag=0&pcursor=1&pv=false&refreshTimes=2&sig=f5a492715f5a00d625e97abe73e078de&source=1&token=322bfccaec274d769bb69be4a75a16e1-406159254&type=7" --compressed`)拿到结果就直接重新导入到PostMan就OK了!