2018-09-19 13:28:15 weixin_38013236 阅读数 672
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27772 人正在学习 去看看 秦子恒

相信有很多小伙伴,在开发微信公众号的时候有碰到过类似的问题 :

 1.微信头像的链接经过特殊处理的,下载后只能浏览,不能对他进行水印或者logo操作;

 2.或者微信头像下载的速度太慢了,需要十几秒钟,用户体验极差,虽然功能实现了,但是做不到用户体验优化;

之前有过类似的经历,网上找了很多都没有找到特别满意的解决方案.最终找到了一个能高效处理微信头像下载的文章 。话不多说 上“干货“啦:

    

<?php
//$url, 微信头像地址 
//$new_file 保存的头像地址

private function getSecond($url,$new_file){
    $header = array(   
     'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',    
     'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',    
     'Accept-Encoding: gzip, deflate',);
     // $url='http://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKkGpNuUhaBniatRsiaG7ksqmhUWzkk40kTRS6icQS7kJcsfxcibQo7vDFcKibr7NHb9YIXiaXsEtLcdL6A/0';
     $curl = curl_init();

     curl_setopt($curl, CURLOPT_URL, $url);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
     curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
     curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
     $data = curl_exec($curl);
     $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);

     curl_close($curl);
     if ($code == 200) {//把URL格式的图片转成base64_encode格式的!    
        $imgBase64Code = "data:image/jpeg;base64," . base64_encode($data);
     }
     $img_content=$imgBase64Code;//图片内容
     //echo $img_content;exit;
     if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img_content, $result))
     { 
       $type = $result[2];//得到图片类型png?jpg?gif?  
       if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $img_content))))
       { return $new_file; }
      } 
}

?>

这个方法,是我找到的所有方法中,用户体验最好的,1秒的时间都不需要 。今天有空就把他发了,希望在开发的路上,大家一起加油 ,转自https://blog.csdn.net/slyjit/article/details/78955884  . 

接下来 就是用thinkphp 内置的水印合成啦

<?php
 // 合成新的图片
    $local_i_img = \think\Image::open($local_file);

   //下载到本地的微信头像 $local_file
   //在这里 $new_img 是新的路径  
   //      $watermark 水印图片
   //$data['postype'] 只是一个标志位 判断水印位置

   switch ($data['postype']) {
           case 0:
             $local_i_img->water($watermark,\think\Image::WATER_CENTER)->save($new_img);
             break;
           case 1:
             $local_i_img->water($watermark,\think\Image::WATER_NORTHWEST)->save($new_img);
             break;
           case 2:
             $local_i_img->water($watermark,\think\Image::WATER_NORTHEAST)->save($new_img);
             break;
           case 3:
             $local_i_img->water($watermark,\think\Image::WATER_SOUTHEAST)->save($new_img);
             break;
           case 4:
             $local_i_img->water($watermark,\think\Image::WATER_SOUTHWEST)->save($new_img);
             break;
    }


?>

懂得小伙伴 记得点个赞哟!

 

2018-11-28 10:10:07 qq_39702981 阅读数 1093
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27772 人正在学习 去看看 秦子恒

**微信小程序上传图片 wx.chooseImage**

 


一、使用API wx.chooseImage(OBJECT)
.js


    var util = require('../../utils/util.js')
    Page({
        data:{
            src:"../image/pic4.jpg"
        },
        gotoShow: function(){var _this = this
            wx.chooseImage({
              count: 9, // 最多可以选择的图片张数,默认9
              sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
              sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
              success: function(res){
                // success
                console.log(res)
                _this.setData({
                    src:res.tempFilePaths
                })
              },
              fail: function() {
                // fail
              },
              complete: function() {
                // complete
              }
            })
        }

二、图片路径进行数据绑定
.wxml

<view class="container">
  <view>
    <button type="default" bindtap="gotoShow" >点击上传照片</button> 
  </view>
  <view>
    <image class= "show-image" mode="aspectFitf" src="{{src}}"></image>
  </view>
</view>

 

号外:
  1、wx.chooseImage 调用相机或相册
  2、<image class= "show-image" mode="aspectFitf" src="{{src}}"></image> 数据绑定
  3、js中动态修改文件路径

var _this = this
        wx.chooseImage({
          count: 9, // 最多可以选择的图片张数,默认9
          sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
          sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
          success: function(res){
            // success
            console.log(res)
            _this.setData({
                src:res.tempFilePaths
            })
          },
          fail: function() {
            // fail
          },
          complete: function() {
            // complete
          }

2017-08-23 19:19:33 fengyeNom1 阅读数 743
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27772 人正在学习 去看看 秦子恒

今天给大家介绍一个仿微信的图片选择器:ImageSelector。ImageSelector支持图片的单选、限数量的多选和不限数量的多选。支持图片预览和图片文件夹的切换。在上一篇文章 《Android 实现一个仿微信的图片选择器》 中我介绍了ImageSelector的实现思路和分析了它的核心代码,有兴趣的同学可以看一下。完整的代码放在了GitHub,欢迎大家下载和使用。本篇文章为大家介绍ImageSelector的具体使用方式。
先上效果图:


相册

文件夹

预览

1、引入依赖
在Project的build.gradle在添加以下代码

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

在Module的build.gradle在添加以下代码

    compile 'com.github.donkingliang:ImageSelector:1.1.1'

2、配置AndroidManifest.xml

//储存卡的读取权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

//图片选择Activity
<activity android:name="com.donkingliang.imageselector.ImageSelectorActivity"
    //去掉ActivityActionBar。
    //使用者可以根据自己的项目去配置,不一定要这样写,只要不ActivityActionBar去掉就可以了。
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    //横竖屏切换处理。
    //如果要支持横竖屏切换,一定要加上这句,否则在切换横竖屏的时候会发生异常。
    android:configChanges="orientation|keyboardHidden|screenSize"/>

//图片预览Activity
<activity android:name="com.donkingliang.imageselector.PreviewActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    android:configChanges="orientation|keyboardHidden|screenSize"/>

3、调起图片选择器
ImageSelector支持图片的单选、限数量的多选和不限数量的多选。在调起图片选择器的时候需要告诉选择器,是那种情况。为了方便大家的使用,我在项目中提供了一个工具类,可以方便地调起选择器。

    /**
     * 打开相册,选择图片,可多选,不限数量。
     *
     * @param activity
     * @param requestCode
     */
    public static void openPhoto(Activity activity, int requestCode) {
        openPhoto(activity, requestCode, false, 0);
    }

    /**
     * 打开相册,选择图片,可多选,限制最大的选择数量。
     *
     * @param activity
     * @param requestCode
     * @param isSingle       是否单选
     * @param maxSelectCount 图片的最大选择数量,小于等于0时,不限数量,isSingle为false时才有用。
     */
    public static void openPhoto(Activity activity, int requestCode,
                                 boolean isSingle, int maxSelectCount) {
        ImageSelectorActivity.openActivity(activity, requestCode, isSingle, maxSelectCount);
    }

工具类里只有简单的两个方法,至于里面的实现逻辑就直接交给了ImageSelectorActivity自己处理,调用者无需关心。调起选择器只需要简单的一句代码就可以了。

 //单选
 ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, true, 0);

//限数量的多选(比喻最多9张)
ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 9);

//不限数量的多选
ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE);
//或者
ImageSelectorUtils.openPhoto(MainActivity.this, REQUEST_CODE, false, 0);

REQUEST_CODE就是调用者自己定义的启动Activity时的requestCode,这个相信大家都能明白。

4、接收选择器返回的数据
在Activity的onActivityResult方法中接收选择器返回的数据。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE && data != null) {
            //获取选择器返回的数据
            ArrayList<String> images = data.getStringArrayListExtra(
            ImageSelectorUtils.SELECT_RESULT);
        }
    }

ImageSelectorUtils.SELECT_RESULT是接收数据的key。数据是以ArrayList的字符串数组返回的,就算是单选,返回的也是ArrayList数组,只不过这时候ArrayList只有一条数据而已。ArrayList里面的数据就是选中的图片的文件路径。

ImageSelector的使用就介绍到这里了。
最后给出ImageSelector的项目地址:https://github.com/donkingliang/ImageSelector



作者:donkingliang
链接:http://www.jianshu.com/p/64a6ed183062
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2018-09-07 09:36:58 qq_41485414 阅读数 623
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27772 人正在学习 去看看 秦子恒

今天我们写一下怎么将图片上面的logo使用PS给去掉,为什么说这个也是常用的技巧之一呢?其实很简单,我们在下载图片的时候很多超(bu)强(yao)大(lian)的网站提供给我们想要的图片,但是一般都有一个水印在上面,还说什么想要去掉水印必须加微信公众号,回复什么东西就可以,更有甚者还要钱,办理会员就可以没有水印,很(gun)感(ni)谢(ma)这些有心的网站,好吧,这些宣传的套路我们这里就不说了,我们今天就写一下怎么去掉这些烦人的水印。

首先我们打开PS

第二步:打开一张需要处理的图片

PS:这是一张可爱的猫咪,我们在处理这种类型的图片的时候打开图片以后不要着急动手操作,我们需要做的是将图片布局分析一下,说人话就是好好看看图片的特点,这样以便于我们后面的取色,有人说我看了半天,只看到一只绝望的猫咪...好吧,那你可能不适合P图,哈哈

第三步:我们选择右边的工具栏中的矩形选框工具,将我们需要的部分圈起来

第四步:右键选择填充

这个时候我们可以看到刚才的那个水印已经没有了

 同样的方法我们全部处理一下

最后就没有了

那么有人就说了,这样的水印太简单了,怎么可能每一个水印都那么的整齐,有的是LOGO,不规则怎么办呢?下面我们看一下不是很简单的怎么处理

第一步:打开一张图片

我们可以看到,这张图片上面有一个LOGO和下面的水印,我们需要将这部分去掉,怎么操作呢?

第二步:和之前一样的操作

 处理好了以后是这样的

当然这样是不行的,稍微放大就可以看出来,我们学P图不能这样,下面是第三步

我们选择左边工具栏中的套索工具-选择一块颜色相对比较好的,看一下下面的形状是什么样的找一块,就像这样

第四步:这时候我们将鼠标切换到工具栏中的移动工具那里,然后按住Alt键+鼠标,移动我们选中的部分到需要补充的地方。

这里可能不是很完美,我简单的演示一下而已,喜欢的可以自己慢慢修复就行了,最后都会是完美的。

OK,到这里就结束了,喜欢的可以关注我,一起交流!

谢谢阅读

 

2016-07-15 23:25:44 qq_18297675 阅读数 1216
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27772 人正在学习 去看看 秦子恒

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


这个的原理是把logo‘画’图片的指定位置.
步骤如下:
1.获取图片和logo的基本信息
getimagesize

2.判断图片资源类型并创建对应图片资源
getPicType (自定义函数)

3.获取logo的位置坐标
getLocal (自定义函数)

4.把logo画上去
imagecopyresampled

5.输出图像
outputImage (自定义函数)

6.释放图片资源
imagedestroy

效果如图:

代码如下:

/**
 * @function 向图像中添加logo
 * @param $picname
 * @param $logo
 * @param int $local logo添加的位置:1:左上角,2:右上角,3:左下角,4:右下角,5:中上,6:中间,7:中下
 *  @param string $pre
 * @return 返回一个新的图片名
 */
function addLogo($picname,$logo,$local="1",$pre="l_")
{
    $picInfo = getimagesize($picname); //获取图片的基本信息
    $logoInfo = getimagesize($logo);   //获取logo的基本信息
    $picW = $picInfo[0];//获取pic宽度
    $picH = $picInfo[1];//获取pic高度
    $logoW = $logoInfo[0]; //获取logo宽度
    $logoH = $logoInfo[1]; //获取logo高度
    //获取图片资源类型并创建对应图片资源
    $picim = getPicType($picInfo[2],$picname);
    $logoim = getPicType($logoInfo[2],$logo);
    //把logo画上去
    $XY = getLocal($local,$picW,$picH,$logoW,$logoH);//获取logo的位置坐标
    imagecopyresampled($picim,$logoim,$XY[0],$XY[1],0,0,$logoW,$logoH,$logoW,$logoH);
    //输出图像
    $newPicName = outputImage($picname,$pre,$picim);
    //释放图片资源
    imagedestroy($picim);
    imagedestroy($logoim);
    return $newPicName;
}

/**
 * @function 获取对应位置的左上角坐标
 * @param $local  位置
 * @param $picW   图片宽
 * @param $picH   图片高
 * @param $logoW  logo宽
 * @param $logoH  logo高
 * @return 返回宽高数组
 */
function getLocal($local,$picW,$picH,$logoW,$logoH)
{
    $XY = array();
    switch($local)
    {
        case 1:
            $XY = array(0,0);
            break;
        case 2:
            $XY = array($picW-$logoW,0);
            break;
        case 3:
            $XY = array(0,$picH-$logoH);
            break;
        case 4:
            $XY = array($picW-$logoW,$picH-$logoH);
            break;
        case 5:
            $XY = array($picW/2 - $logoW/2,0);
            break;
        case 6:
            $XY = array($picW/2 - $logoW/2,$picH/2 - $logoH/2);
            break;
        case 7:
            $XY = array($picW/2 - $logoW/2,$picH-$logoH);
            break;
        default:
            die("不支持这个位置的logo添加");
            break;
    }
    return $XY;
}

/**
 * function 判断并返回图片的类型(以资源方式返回)
 * @param int $type 图片类型
 * @param string $picname 图片名字
 * @return 返回对应图片资源
 */
function getPicType($type,$picname)
{
    $im=null;
    switch($type)
    {
        case 1:  //GIF
            $im = imagecreatefromgif($picname);
            break;
        case 2:  //JPG
            $im = imagecreatefromjpeg($picname);
            break;
        case 3:  //PNG
            $im = imagecreatefrompng($picname);
            break;
        case 4:  //BMP
            $im = imagecreatefromwbmp($picname);
            break;
        default:
            die("不认识图片类型");
            break;
    }
    return $im;
}

/**
 * function 输出图像
 * @param string $picname 图片名字
 * @param string $pre 新图片名前缀
 * @param resourse $nim 要输出的图像资源
 * @return 返回新的图片名
 */
function outputImage($picname,$pre,$nim)
{
    $info = getimagesize($picname);
    $picInfo = pathInfo($picname);
    $newPicName = $picInfo['dirname'].'/'.$pre.$picInfo['basename'];//输出文件的路径
    switch($info[2])
    {
        case 1:
            imagegif($nim,$newPicName);
            break;
        case 2:
            imagejpeg($nim,$newPicName);
            break;
        case 3:
            imagepng($nim,$newPicName);
            break;
        case 4:
            imagewbmp($nim,$newPicName);
            break;
    }
    return $newPicName;
}
没有更多推荐了,返回首页