精华内容
下载资源
问答
  • 帝国CMS 微信分享文章显示缩略图、简介源码 分享到朋友圈 转发好友带缩略图 适用帝国CMS 7.5 UTF8版,GBK版请自行转码 前提公众号须是认证的,不管是订阅号还是服务号,域名须备过案,网站空间php,file_get_...
  • 本接口适用于获取了分享接口的微信公众号,通过认证的订阅号和服务号都可以获取该接口。微信分享接口php版,可自定义分享标题、小图标、链接网址。可在页面打开后,编辑分享的内容。适合想要制作php版微信分享接口...

    914f79c2cc3626d6e0ce79b7f1413f8b.png

    98c3bff427711cc691272f15cead6f2f.png

    本接口适用于获取了分享接口的微信公众号,通过认证的订阅号和服务号都可以获取该接口。

    微信分享接口php版,可自定义分享标题、小图标、链接网址。

    可在页面打开后,编辑分享的内容。

    适合想要制作php版微信分享接口程序,又不清楚如何制作的朋友参考研究

    因本产品是虚拟服务项目,请注意以下几点:

    1、替换 下源码的appid和appscrect,以及配置微信公众号白名单,JS安全域名等,此源码主要针对PHP技术人员,可根据要求在代码里自定义标题、图片、描述!

    2、如果你是php程序技术人员,可直接拍一件购买。里面有配置相关教程。如果要这边协助安装帮接口打通请拍两件,只负责建立一个新php文件测试能否分享,不负责帮忙嵌入到程序中,如果与其模版相结合(如帝国CMS)五件以上,拍之前请联系店主

    15.8元源码安装方法如下:重要的事情再说一遍需PHP技术人员进行对接

    1、文件夹wxshareapi,上传到根目录。

    2、wxshareapi\config\config.php 里面的

    $appid = “填写最新参数”;

    $appsecret = “填写最新参数”;

    微信公众号后台需设置js业务域名、JS接口安全域名  为上传源码所对应的域名,以及IP白名单设置为你空间的IP

    把以下代码放到想要分享的页面模板里,放在

    展开全文
  • 最近做的项目有用到...最开始通过读取系统thumbnail(缩略图)表获取缩略图,但是有的缩略图图片是旋转过的,又读不到旋转的角度,而原始图片可以读到旋转角度,所以只有先读取原始图片,裁剪成缩略图。此处读的是Ca

            最近做的项目有用到查看系统图片并选择多张图片的功能,网上搜索了一些源码运行起来,拖动一下缩略图列表就卡住了,都是没有考虑到OOM的原因。结合网上的一些LRUCACHE和ASYNCTASK资料,自己写了个小组件。最开始通过读取系统thumbnail(缩略图)表获取缩略图,但是有的缩略图图片是旋转过的,又读不到旋转的角度,而原始图片可以读到旋转角度,所以只有先读取原始图片,裁剪成缩略图。此处读的是Camera文件夹的图片,还可以像微信图片那样扩展,按文件夹分类(图片、视频、截屏等),在此抛砖引玉,欢迎各位雅正。

             先获取所有原始图片路径。

    /* 获取本地所有图片路径 */
    	private void getAllPaths() {
    		if (!DeviceUtil.isSDCardMounted()) {
    			Toast.makeText(this, "SD卡没有正常挂载,无法读取图片!", Toast.LENGTH_SHORT)
    					.show();
    			return;
    		}
    		mProgressDialog = ProgressDialog.show(this, null, "正在扫描图片,请稍候...");
    		new Thread(new Runnable() {
    
    			@Override
    			public void run() {
    				Cursor cursor = null;
    				try {
    					String[] proj = { MediaStore.Images.Media.DATA };
    					String where = "mime_type in ('image/png','image/jpeg')";
    					String sortOrder = Media.DATE_MODIFIED;
    					cursor = mContentResolver.query(
    							MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj,
    							where, null, sortOrder + " DESC");
    					if (cursor == null || !cursor.moveToFirst()) {
    						return;
    					}
    					do {
    						int column_index = cursor
    								.getColumnIndexOrThrow(proj[0]);
    						String imagePath = cursor.getString(column_index);
    						imagePaths.add(imagePath);// 图片路径
    					} while (cursor.moveToNext());
    				} catch (Exception e) {
    					e.printStackTrace();
    				} finally {
    					if (cursor != null) {
    						cursor.close();
    					}
    					mHandler.sendEmptyMessage(SCAN_OK);
    				}
    			}
    
    		}).start();
    
    	}
           LruCaheUtil类

    public class LruCacheUtil {
    	/**
    	 * 缓存Image的类,当存储Image的大小大于LruCache设定的值,系统自动释放内存
    	 */
    	private LruCache<String, Bitmap> mMemoryCache;
    
    	public LruCacheUtil(Context context) {
    		// 获取系统分配给每个应用程序的最大内存,每个应用系统分配32M
    		int maxMemory = (int) Runtime.getRuntime().maxMemory();	
    		int mCacheSize = maxMemory / 8;
    		// 给LruCache分配1/8 4M
    		mMemoryCache = new LruCache<String, Bitmap>(mCacheSize) {
    
    			// 必须重写此方法,来测量Bitmap的大小
    			@Override
    			protected int sizeOf(String key, Bitmap value) {
    				return value.getRowBytes() * value.getHeight();
    			}
    		};
    	}
    
    	/**
    	 * 移除图片缓存
    	 * 
    	 * @param key
    	 */
    	public synchronized void removeImageCache(String key) {
    		if (key != null) {
    			if (mMemoryCache != null) {
    				Log.i("LruCacheUtils", "移除的图片名称" + key);
    				Bitmap bm = mMemoryCache.remove(key);
    				if (bm != null)
    					bm.recycle();
    			}
    		}
    	}
    
    	/**
    	 * 清除缓存
    	 */
    	public void clearCache() {
    		if (mMemoryCache != null) {
    			if (mMemoryCache.size() > 0) {
    
    				Log.d("LruCacheUtils", "缓存的大小为:mMemoryCache.size() "
    						+ mMemoryCache.size());
    				mMemoryCache.evictAll();
    				Log.d("LruCacheUtils", "清空后缓存的大小为:mMemoryCache.size()"
    						+ mMemoryCache.size());
    			}
    			mMemoryCache = null;
    		}
    	}
    
    	/**
    	 * 添加Bitmap到内存缓存
    	 * 
    	 * @param key
    	 * @param bitmap
    	 */
    	public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
    		if (getBitmapFromMemCache(key) == null && bitmap != null) {
    			mMemoryCache.put(key, bitmap);
    		}
    	}
    
    	/**
    	 * 从内存缓存中获取一个Bitmap
    	 * 
    	 * @param key
    	 * @return
    	 */
    	public Bitmap getBitmapFromMemCache(String key) {
    		return mMemoryCache.get(key);
    	}
    }

    GridView的Adapter实现呢了OnScrollListener接口,这样可以控制每次只加载屏幕可见部分的缩略图。缩略图的加载是通过ASYNCTASK来实现的。内存缓存中有,取内存缓存;内存缓存中没有,取文件缓存,并将图片存入内存缓存;文件缓存中没有,再读取原图处理,并将图片存入内存缓存和文件缓存。这样可以浏览海量图片时发生OOM。
    public class GridAdapter extends BaseAdapter implements OnScrollListener {
    	
    	private static final String TAG="GridAdapter";
    	/**
    	 * 获取选中图片数量监听
    	 */
    	public OnSelectedListener onSelectedListener;
    	/**
    	 * 异步图片处理器
    	 */
    	private AsyncLoadedImage asyncLoadedImage;
    
    	/**
    	 * LruCache缓存工具
    	 */
    	private LruCacheUtil mLruCacheUtils;
    
    	/**
    	 * 获取每个ITEM大小,作为缩放图片的宽度和高度
    	 */
    	private Point mPoint = new Point(0, 0);
    
    	private LayoutInflater laytouInflater;
    
    	/**
    	 * 本地所有图片路径列表
    	 */
    	private List<String> mImagePaths;
    
    	/**
    	 * 记录全部缩略图选中状态
    	 */
    	private HashMap<Integer, Boolean> mSelectedMap = new HashMap<Integer, Boolean>();
    
    	/**
    	 * 记录已选中缩略图路径
    	 */
    	@SuppressLint("UseSparseArrays")
    	private HashMap<Integer, String> mPathSelectedMap = new HashMap<Integer, String>();
    
    	/**
    	 * 是否首次进入界面
    	 */
    	private boolean mIsFirstEnter = true;
    
    	/**
    	 * 一屏中第一个item的位置
    	 */
    	private int mFirstVisibleItem;
    
    	/**
    	 * 一屏中所有item的个数
    	 */
    	private int mVisibleItemCount;
    
    	/**
    	 * 父容器
    	 */
    	private GridView mGridView;
    
    	private Context mContext;
    
    	/* 一次最多可选的图片数量 */
    	private int mMaxSelectedCount = 0;
    	
    	/**
    	 * 设置选中项目后的监听
    	 * 
    	 * @param onSelectedCountListener
    	 */
    	public void setOnSelectedListener(OnSelectedListener onSelectedListener) {
    		this.onSelectedListener = onSelectedListener;
    	}
    
    	public GridAdapter(Context context, GridView gridView,
    			List<String> imagePaths, int maxSelectedCount) {
    		mContext = context;
    		laytouInflater = LayoutInflater.from(context);
    		mGridView = gridView;
    		mGridView.setOnScrollListener(this);
    		mImagePaths = imagePaths;
    		asyncLoadedImage = new AsyncLoadedImage();
    		mLruCacheUtils = new LruCacheUtil(context);
    		mMaxSelectedCount = maxSelectedCount;
    	}
    
    	@Override
    	public int getCount() {
    		
    		return mImagePaths.size();
    	}
    
    	@Override
    	public Object getItem(int position) {		
    		return mImagePaths.get(position);
    	}
    
    	@Override
    	public long getItemId(int position) {		
    		return position;
    	}
    
    	@Override
    	public View getView(final int position, View convertView, ViewGroup parent) {
    		ViewHolder viewHolder = null;
    		final String imagePath = mImagePaths.get(position);
    		if (convertView == null) {
    			viewHolder = new ViewHolder();
    			convertView = laytouInflater.inflate(R.layout.grid_view_item, null);
    			viewHolder.mCheckBox = (CheckBox) convertView
    					.findViewById(R.id.cb_select);
    			viewHolder.mImageView = (MyImageView) convertView
    					.findViewById(R.id.iv_thumbnail);
    			viewHolder.mImageView.setOnMeasureListener(new OnMeasureListener() {
    				@Override
    				public void onMeasureSize(int width, int height) {
    					mPoint.set(width, height);
    				}
    			});
    			convertView.setTag(viewHolder);
    		} else {
    			viewHolder = (ViewHolder) convertView.getTag();
    			viewHolder.mImageView
    					.setImageResource(R.drawable.friends_sends_pictures_no);// 先设置每个ITEM的默认图片
    
    		}
    		viewHolder.mImageView.setTag(imagePath);
    		// 图片选中监听
    		viewHolder.mCheckBox
    				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    					@Override
    					public void onCheckedChanged(CompoundButton buttonView,
    							boolean isChecked) {
    						mSelectedMap.put(position, isChecked);
    						// 统计已选择的图片
    						if (isChecked) {
    							mPathSelectedMap.put(position, imagePath);
    
    						} else {
    							mPathSelectedMap.remove(position);
    						}
    						// 限制每次选择图片的数量
    						if (mPathSelectedMap.size() > mMaxSelectedCount) {
    							Toast.makeText(
    									mContext,
    									String.format(
    											mContext.getResources()
    													.getString(
    															R.string.max_selected_cousts),
    											mMaxSelectedCount),
    									Toast.LENGTH_SHORT).show();
    							buttonView.setChecked(false);
    							mSelectedMap.put(position, false);
    							mPathSelectedMap.remove(position);
    						} else {
    							if (onSelectedListener != null) {
    								onSelectedListener
    										.setSelectResult(mPathSelectedMap);// 设置选中数量
    							}
    						}
    					}
    				});
    		viewHolder.mCheckBox
    				.setChecked(mSelectedMap.containsKey(position) ? mSelectedMap
    						.get(position) : false);
    
    		return convertView;
    	}
    
    	@Override
    	public void onScrollStateChanged(AbsListView view, int scrollState) {
    		if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
    			asyncLoadedImage = new AsyncLoadedImage();
    			asyncLoadedImage.execute();
    		} else {
    			if (asyncLoadedImage != null)
    				asyncLoadedImage.cancel(true);
    		}
    
    	}
    
    	@Override
    	public void onScroll(AbsListView view, int firstVisibleItem,
    			int visibleItemCount, int totalItemCount) {
    		mFirstVisibleItem = firstVisibleItem;
    		mVisibleItemCount = visibleItemCount;
    		// 因此在这里为首次进入程序开启下载任务。
    		if (mIsFirstEnter && visibleItemCount > 0) {
    			asyncLoadedImage.execute();
    			mIsFirstEnter = false;
    		}
    
    	}
    	
    	
    	class AsyncLoadedImage extends AsyncTask<Object,GridViewItem,Object>{
    
    		@Override
    		protected void onPostExecute(Object result) {
    			// TODO Auto-generated method stub
    			super.onPostExecute(result);
    		}
    
    		@Override
    		protected void onProgressUpdate(GridViewItem... values) {
    			if (isCancelled())
    				return;
    			for (GridViewItem gridViewItemBean : values) {
    				ImageView mImageView = (ImageView) mGridView
    						.findViewWithTag(gridViewItemBean.getmPathName());
    				if (mImageView != null) {
    					mImageView.setImageBitmap(gridViewItemBean.getmBitmap());
    				}
    			}
    		}
    
    		@Override
    		protected Object doInBackground(Object... params) {
    			if (isCancelled())
    				return null;
    			for (int i = mFirstVisibleItem; i < mFirstVisibleItem
    					+ mVisibleItemCount; ++i) {
    				try {
    					String imagePath = mImagePaths.get(i);
    					GridViewItem gridViewItemBean;
    					String fileName = FileUtil.getInstance().getFileName(
    							imagePath);
    					// 首先内存缓存中取
    					Bitmap bitmapLruCache = mLruCacheUtils
    							.getBitmapFromMemCache(fileName);
    					if (bitmapLruCache != null) {
    						gridViewItemBean = new GridViewItem();
    						gridViewItemBean.setmBitmap(bitmapLruCache);
    						gridViewItemBean.setmPathName(imagePath);
    					} else {// 内存缓存没有,再从文件缓存获取
    						Bitmap bitmapCache = FileUtil.getInstance().getBitmap(
    								fileName);// 获取文件缓存
    						if (bitmapCache != null) {
    							gridViewItemBean = new GridViewItem();
    							gridViewItemBean.setmBitmap(bitmapCache);
    							gridViewItemBean.setmPathName(imagePath);
    							mLruCacheUtils.addBitmapToMemoryCache(fileName,
    									bitmapCache);
    						} else {// 文件缓存没有,再读取原图处理
    							Bitmap bitmap;
    							Bitmap rotateBitmap;
    							Bitmap newBitmap;
    							BitmapFactory.Options options = new BitmapFactory.Options();
    							options.inSampleSize = 10;
    							bitmap = BitmapFactory.decodeFile(imagePath,
    									options);
    							// 获取图片旋转的角度
    							int angle = BitmapUtil
    									.readPictureDegree(imagePath);
    							rotateBitmap = angle != 0 ? BitmapUtil
    									.rotaingImageView(angle, bitmap) : bitmap;
    							newBitmap = ThumbnailUtils.extractThumbnail(
    									rotateBitmap,
    									mPoint == null ? 0 : mPoint.x,
    									mPoint == null ? 0 : mPoint.y);// 获取缩略图
    							bitmap.recycle();
    							rotateBitmap.recycle();
    							if (newBitmap == null)
    								continue;
    							gridViewItemBean = new GridViewItem();
    							gridViewItemBean.setmBitmap(newBitmap);
    							gridViewItemBean.setmPathName(imagePath);
    							// 将图片存到文件缓存
    							FileUtil.getInstance().savaBitmap(fileName,
    									newBitmap);
    							// 将图片加入LruCache缓存
    							mLruCacheUtils.addBitmapToMemoryCache(fileName,
    									newBitmap);
    						}
    					}
    					publishProgress(gridViewItemBean);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    			return null;
    		}
    		
    	}
    	
    	class ViewHolder {
    		MyImageView mImageView;
    		CheckBox mCheckBox;
    	}
    	
    	/**
    	 * 获取选中项目后监听
    	 * 
    	 * @author SuttonSun
    	 * 
    	 */
    	public interface OnSelectedListener {
    		public void setSelectResult(HashMap<Integer, String> map);
    	}
    	
    	
    	/**
    	 * 通知更新
    	 * 
    	 * @param list
    	 *            图片路径列表
    	 */
    	public void setDatasetChanged(List<String> list) {
    		mImagePaths = list;
    		mIsFirstEnter = true;
    		asyncLoadedImage = new AsyncLoadedImage();
    		this.notifyDataSetChanged();
    	}
    
    	/**
    	 * 取消加载
    	 */
    	public void cancelTask() {
    		if (asyncLoadedImage != null) {
    			Log.i(TAG, "停止同步任务!");
    			asyncLoadedImage.cancel(true);
    		}
    		if (mLruCacheUtils != null) {			
    			// 清除缓存
    			mLruCacheUtils.clearCache();
    		}
    	}
    
    
    
    }
    
    以上是关键部分代码。

    效果图:


    源码下载地址:http://download.csdn.net/detail/qq_33819047/9414437



    展开全文
  • 微信图文链接,可设置个性化的分享图片、标题、描述等,那么如何制作微信图文链接呢?众所周知微信图文链接会使分享的内容更生动有趣,更容易获得良好的传播效果,相较于裸链接,图文链接更具有吸引力,今天就给大家...

    微信图文链接,可设置个性化的分享图片、标题、描述等,那么如何制作微信图文链接呢?众所周知微信图文链接会使分享的内容更生动有趣,更容易获得良好的传播效果,相较于裸链接,图文链接更具有吸引力,今天就给大家介绍一下微信图文链接的生成方法!

    微信图文链接与普通链接

    普通链接

    a6fa76f76cb2

    微信图文链接

    a6fa76f76cb2

    很明显能看到,图文链接无论是美观程度还是信息曝光率都要完胜普通链接,对于微信营销的商家的来说,图文链接带来的转化率要优于普通链接很多。

    如何制作图文链接?

    方法1:使用wecard

    1、官网链接

    2、需准备材料

    准备链接+自定义的标题+自定义的内容+缩略图即可自动生成。

    方法2:对接公众号

    1、需准备材料

    ① 微信认证过的公共号必须是认证过的,未认证或者认证过期都不行

    ② 一个域名需要备案过的

    ③ 一台服务器因为前端页面需要的appId、signature是需要后台传递过来的。官方默认后台程序有PHP、Python、Node、Java版本,不过我这里以PHP作为演示

    2、配置过程

    ①  绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”(就是发布用的那个域名)

    ②  获取access_token

    这部分工作属于后台开发,主要功能是利用公共号APPID、APPSECRET从微信服务器获取对应的access_token。由于这部分代码官方有demo,所以直接用官方的sample例子做演示。

    下载官方示例代码后,根据自己的情况选择对应的后台语言(这里以PHP为例)。将下载得到的压缩包解压后复制php文件夹到网站根目录,然后将需要分享出去的html文件的后缀名改为.php(必须。因为后台不完善所以不能直接ajax获得access_token的值,这里假设需要分享的html页面是index.php)

    打开index.php,在html的DOCTYPE声明之前添加一段PHP代码:<?php

    require_once "../php/jssdk.php";/* 这里的文件路径视`php`文件夹所在路径而定。不一定都要一样,个人建议扔到一个所有html文件夹都可以引用的目录*/

    $jssdk = new JSSDK("你的APPID", "你的APPSECRET");

    $signPackage = $jssdk->GetSignPackage();

    ?>

    3、前端配置验证权限

    这里是前端的工作,主要是利用前一步得到的access_token来获取签名等认证信息,只有正确的配置才可以正常获取到使用官方js-sdk的权限。

    ① 引入JS文件

    在index.php文件里添加一个script标签,引用官方js:

    ② 通过config接口注入权限验证配置

    wx.config({

    debug: false,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。移动端会通过弹窗来提示相关信息。如果分享信息配置不正确的话,可以开了看对应报错信息

    appId: '<?php echo $signPackage["appId"];?>',

    timestamp: '<?php echo $signPackage["timestamp"];?>',

    nonceStr: '<?php echo $signPackage["nonceStr"];?>',

    signature: '<?php echo $signPackage["signature"];?>',

    jsApiList: [//需要使用的JS接口列表,分享默认这几个,如果有其他的功能比如图片上传之类的,需要添加对应api进来

    'checkJsApi',

    'onMenuShareTimeline',//

    'onMenuShareAppMessage',

    'onMenuShareQQ',

    'onMenuShareWeibo'

    ]

    });

    ③ 配置分享信息并通过ready接口处理

    window.share_config = {

    "share": {

    "imgUrl": "http://www.yourwebsite.com/share.png",//分享图,默认当相对路径处理,所以使用绝对路径的的话,“http://”协议前缀必须在。

    "desc" : "你对页面的描述",//摘要,如果分享到朋友圈的话,不显示摘要。

    "title" : '分享卡片的标题',//分享卡片标题

    "link": window.location.href,//分享出去后的链接,这里可以将链接设置为另一个页面。

    "success":function(){//分享成功后的回调函数

    },

    'cancel': function () {

    // 用户取消分享后执行的回调函数

    }

    }

    };

    wx.ready(function () {

    wx.onMenuShareAppMessage(share_config.share);//分享给好友

    wx.onMenuShareTimeline(share_config.share);//分享到朋友圈

    wx.onMenuShareQQ(share_config.share);//分享给手机QQ

    });

    到这里就配置完成,正常情况下的话分享出去就会有摘要和分享图了。

    展开全文
  • 帝国CMS 微信分享文章显示缩略图、简介源码 分享到朋友圈 转发好友带缩略图 适用帝国CMS 7.5 UTF8版,GBK版请自行转码 前提公众号须是认证的,不管是订阅号还是服务号,域名须备过案,网站空间php,file_get_...

    帝国CMS 微信分享文章显示缩略图、简介源码 分享到朋友圈 转发好友带缩略图
    资源下载地址:https://download.csdn.net/download/bobbsh/12139464
    适用帝国CMS 7.5 UTF8版,GBK版请自行转码

    前提公众号须是认证的,不管是订阅号还是服务号,域名须备过案,网站空间php,file_get_contents函数须支持https抓取

    1、文件夹wxshareapi,上传到根目录。

    2、wxshareapi\config\config.php 里面的appid和appsecret 替换成你自己公众号的(基本配置-公众号开发信息)

    $appid = "填写最新参数";
     
    $appsecret = "填写最新参数";
    

    3、如果你是https的网址,那么请把http://res.wx.qq.com/open/js/jweixin-1.2.0.js下载到本地,调用本地的JS

    微信公众号后台需设置JS接口安全域名 为上传源码所对应的域名(公众号设置-功能设置)

    以及IP白名单设置为你空间的IP(基本配置-公众号开发信息)

    把以下面的代码放到想要分享的页面模板里,放在 上面就可以了(以下引用这段是废话)

    概述 微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。
    通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直

    展开全文
  • 因为近期公司计划做个摄影比赛,需要收集员工的照片作品,因为肯定是需要原的,那样通过公司邮箱显然是不方便的,于是想到在小程序中添加图片上传功能,以前Sham用过每次添加1张图片,然后上传到服务器及数据库,...
  • 先看效果: 我不喜欢回形针。 ...以前我仅仅把网页开始...先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 步骤二:引入JS文件 <script src="http://res.wx.qq.com/open/j...
  • PYPhotoBrowser Framework with a simple method of rendering images. ...Renderings【效果】 Status 【支持哪些状态】 Layouts【支持哪些布局】 Gestures【支持哪些手势】 What place will use this f...
  • 仿微信的图片选择器

    2018-04-25 08:32:13
    JPPhotoChooseBrowserDemo 16年曾抽空写一个仿微信的项目,这个选择器是当时封装的.最近有时间想到了这个,就把当年的代码抽出来有了这个小...将此文件夹 'JPPhotoChooseBrowser' 整个拖入工程 将 'Assets.xcassets'...
  • 现在我们开始:原料:GetwxLink微信公众号:步骤一:绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。步骤二:引入JS文件rurl=location.href; $.ajax({ type:"get", ...
  • 微信认证】检查当前公众号是否认证,如果没有,需要先进行微信认证。 2..打开【微信公众号平台】中的【基本配置】,将服务器的IP添加到【公众号开发信息】的【IP白名单】中 3.打开【微信公众号平台】中的【公众号...
  • 原理其实挺简单的,android 中文件 修改 增加 删除等等 都会在数据库里的某个表里记录下来,你需要的时候 只要迅速的去查找这个表里的值 即可得到你想...先上一张table 表,帮助大家理解。在data data com.android...
  • PYPhotoBrowser Framework with a simple method of rendering images....Renderings【效果】 Status 【支持哪些状态】 Layouts【支持哪些布局】 Gestures【支持哪些手势】 What place wil
  • 最近项目需求中要用到类似微信朋友圈发布动态选择图片的UI效果,研究了一下,特来分享成果,多的不说来看代码。 Activity类 package com.whfp.circle_of_friends; import java.io.File; import java.io....
  • 图片列表点击可查看大图,多图可以左右滑动查看,再次点击会到缩略图的功能 思考: 开始考虑使用v-viewer组件,功能比较多,可以旋转,放大缩小图片等,但是并不完全符合需求,后采用swiper-slide,自己写组件方式...
  • iOS 生成缩略图

    2015-05-22 17:32:03
    通过传递图片名,在library文件夹中得Caches文件中查找缓存图片,生成缩略图(32k)。以方便分享到微博、微信等第三方工具中。
  • 实现了蕾西微信朋友圈发布动态的选择照片的UI、图片压缩、显示缩略图,点击缩略图删除文件,退出删除临时文件夹等。
  • 1.扫描手机中的图片,默认显示图片最多的文件夹,在底部显示文件夹的名字以及图片的数量。 2.点击底部,弹出 popupWindow,此 popupWindow显示所有包含图片的文件夹以及文件夹的名字。 3.选择文件夹,进入图片选择...
  • 最近做开发需要解决一个模仿微信朋友圈附加图片的功能,具体要求如下: (1)从手机中最多选择3张图片,可拍照上传; (2)选择的图片可以点击移除然后再添加新图片; (3)可以在手机包含图片的各个文件夹中随意...
  • 最近做开发需要解决一个模仿微信朋友圈附加图片的功能,具体要求如下: (1)从手机中最多选择3张图片,可拍照上传; (2)选择的图片可以点击移除然后再添加新图片; (3)可以在手机包含图片的各个文件夹中随意...
  • 怎么寻找微信撤回的图片

    千次阅读 2021-05-23 14:00:09
    自从发布文章“寻找微信撤回的图片”之后,骗了不少粉啊。 总之,之前提出了一种可以找到微信撤回图片的方法。 2 真相 之前的说法是,工程师并没有真正把撤回的图片删除,而是加密后藏起来了。其实这样说并不严谨...
  • 仿照微信,朋友圈分享图片功能 。可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 。很不错的源码,大家有需要可以下载看看 。 微信 微信 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,419
精华内容 567
关键字:

微信缩略图文件夹