CODESHIF - 2018年12月 最有灵魂的开发者 2018-12-27T21:37:00+08:00 Typecho https://www.codeshif.com/feed/atom/2018/12/ <![CDATA[EvaThumber截取图片失败,尺寸过大解决办法]]> https://www.codeshif.com/archives/27.html 2018-12-27T21:37:00+08:00 2018-12-27T21:37:00+08:00 admin https://www.codeshif.com 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;
    }
}

然后就好了,
如果给与的截取宽高大于图片的宽高,就取给与的最小值进行判断,
如果最小值小于图片宽高,就用这个最小值作为基准进行截取图片。

如果最小值大于图片宽高,就用图片的宽高最小值最为基准,进行裁切图片。

]]>
<![CDATA[ApacheRewrite修改EvaThumber适应需要的URL]]> https://www.codeshif.com/archives/26.html 2018-12-27T05:30:00+08:00 2018-12-27T05:30:00+08:00 admin https://www.codeshif.com 如何修改EvaThumber适应需要的URL

EvaThumber的路径方式为:

/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);
]]>
<![CDATA[Ubuntu Apache2开启Rewrite]]> https://www.codeshif.com/archives/25.html 2018-12-25T19:56:00+08:00 2018-12-25T19:56:00+08:00 admin https://www.codeshif.com 首先执行

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
]]>
<![CDATA[JavaScript substr、substring和slice的区别]]> https://www.codeshif.com/archives/24.html 2018-12-24T21:15:00+08:00 2018-12-24T21:15:00+08:00 admin https://www.codeshif.com 区别:
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 第二参数可以是负数,他的第二参数是绝对地址

]]>
<![CDATA[如何在NSTableView中的NSComboBoxCell添加值]]> https://www.codeshif.com/archives/23.html 2018-12-20T00:31:00+08:00 2018-12-20T00:31:00+08:00 admin https://www.codeshif.com 注意:在NSTableView中的NSComboBoxCell,每行中的该列是共享的,所以我们只需要对该列数据添加一次数据即可。

第一种做法 Interface-Builder直接刚,


注意 取消勾选 Uses Data Source

第二种做法,使用 Value Selection


注意选择Content Views

self.comboBoxData就是你的AppDelegate中定义的一个属性咯。

//  下拉框数据
@property (nonatomic,strong) NSArray* ComboBoxCellData;
//  初始化下拉框数据
self.comboBoxCellData = @[@"text",@"textarea",@"password",@"datetime"];

第三种做法,使用直接添加


注意使用Interface-Builder将元素拖拽到代码里做个Outlet

  1. 打开你的XIB文件
  2. 选择双环
  3. ComboBoxCell直接拖拽到你的AppDelegate属性区

    注意别弄错了,要弄Cell不是Column,之后你就可以直接添加数据给它了

例如:

[self.comboBoxCell addItemsWithObjectValues:@[@"text",@"textarea",@"password",@"datetime",@"hidden"]];

第四种做法,使用NSComboBoxCellDataSource


开启元素的Uses Data Source哦别忘了!
image.png

这里说一下,XCode可以两种方式实现dataSource

  1. 代码设置dataSource

    //  设置下拉框数据源
    [self.comboBoxCell setDataSource:self];
  2. 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了

其他


如你所见我成功的设置了,很逼性是吧!当然了这个工具自己用啊

废话不多说~当然了,愿意用哪种都行,哈哈操

]]>
<![CDATA[Charles复制出的CURL无法导入PostMan]]> https://www.codeshif.com/archives/22.html 2018-12-20T00:30:00+08:00 2018-12-20T00:30:00+08:00 admin https://www.codeshif.com 如图所示,复制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了

]]>
<![CDATA[PostMan从Charles复制CURL出来的不能成功执行]]> https://www.codeshif.com/archives/21.html 2018-12-20T00:27:00+08:00 2018-12-20T00:27:00+08:00 admin https://www.codeshif.com 从Charles导出来的CURL数据,修改后导入PostMan执行并不成功,如图所示:

image-20181220002055015

但是直接执行该代码在SHELL却是成功的!

image-20181220002149168

问题出现在哪里?检查了发现是代码参数里面的字段被编码了,怎么解决呢?

直接打开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了!

]]>