1. 引用:SixLabors.ImageSharp,SixLabors.ImageSharp.Drawing,System.Drawing.Common
  2.  
  3.    /// <summary>
  4. /// 群组图片合并
  5. /// </summary>
  6. public static class ImageSharpHelper
  7. {
  8. /// <summary>
  9. /// 背景图片缩略图大小
  10. /// </summary>
  11. public static int BackHeigth = ;
  12.  
  13. #region 获取合并后的图片
  14. /// <summary>
  15. /// 获取合并后的图片
  16. /// </summary>
  17. /// <param name="ImageFile">要合并的图片路径</param>
  18. /// <returns></returns>
  19. public static ApiResult GetImageSharp(List<string> ImageFile)
  20. {
  21. if (ImageFile.Count <= || ImageFile.Count > )
  22. {
  23. return ApiResult.Fail(ApiEnum.OtherError, "合并的图片只能2到9张");
  24. }
  25.  
  26. //背景图
  27. var aBase64Str = @"iVBORw0KGgoAAAANSUhEUgAAALEAAACxCAIAAAAES8uSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE4OTBFNDM1OTMwQjExRTlBN0ZBOTQyQzFCQjg0MzRBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE4OTBFNDM2OTMwQjExRTlBN0ZBOTQyQzFCQjg0MzRBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTg5MEU0MzM5MzBCMTFFOUE3RkE5NDJDMUJCODQzNEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTg5MEU0MzQ5MzBCMTFFOUE3RkE5NDJDMUJCODQzNEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7toEL7AAABQ0lEQVR42uzSQREAAAQAQfRPoiRfHexGuLmcDrhKAjyBJ/AEnsATeAJP4Ak8gSfwBJ7AE3gCT+AJ8ASewBN4Ak/gCTyBJ/AEnsATeAJP4Ak8gSfAE3gCT+AJPIEn8ASewBN4Ak/gCTyBJ/AEngBP4Ak8gSfwBJ7AE3gCT+AJPIEn8ASewBN4AjyBJ/AEnsATeAJP4Ak8gSfwBJ7AE3gCT+AJ8ASewBN4Ak/gCTyBJ/AEnsATeAJP4Ak8gSfAE3gCT+AJPIEn8ASewBN4Ak/gCTyBJ/AEngBP4Ak8gSfwBJ7AE3gCT+AJPIEn8ASewBN4Ak9IgCfwBJ7AE3gCT+AJPIEn8ASewBN4Ak/gCTwBnsATeAJP4Ak8gSfwBJ7AE3gCT+AJPIEn8AR4Ak/gCTyBJ/AEnsATeAJP4Ak8gSfwBI+sAAMAmMcDC6uBzccAAAAASUVORK5CYII=";
  28.  
  29. List<byte[]> list = new List<byte[]>();
  30. foreach (var item in ImageFile)
  31. {
  32. list.Add(GetImageByte(item));
  33. }
  34. return ImageCaoByte(Convert.FromBase64String(aBase64Str), list);
  35. }
  36. #endregion
  37.  
  38. #region 合并图片 base64 List集合
  39. /// <summary>
  40. /// 合并图片 base64 List集合
  41. /// </summary>
  42. /// <param name="backBase64">背景图片</param>
  43. /// <param name="ListBase64">合成图片集合</param>
  44. /// <returns></returns>
  45. public static ApiResult ImageCaoBase64(string backBase64, List<string> ListBase64)
  46. {
  47. List<byte[]> list = new List<byte[]>();
  48. foreach (var item in ListBase64)
  49. {
  50. list.Add(Convert.FromBase64String(item));
  51. }
  52. return ImageCaoByte(Convert.FromBase64String(backBase64), list);
  53. #region 单张测试
  54. //byte[] templebytes = Convert.FromBase64String(aBase64Str);
  55. //byte[] outputbytes = Convert.FromBase64String(bBase64Str);
  56.  
  57. //System.Drawing.Image temple = MakeThumbnail(templebytes, 200, 200, ThumbnailMode.Cut);
  58. //System.Drawing.Image output = MakeThumbnail(outputbytes, 100, 100, ThumbnailMode.Cut);
  59.  
  60. //var templeNailByte = ImgToByt(temple);
  61. //var outputNailByte = ImgToByt(output);
  62.  
  63. //IImageFormat format = null;
  64. //Image<Rgba32> templeRgba32= SixLabors.ImageSharp.Image.Load(templeNailByte, out format);
  65. //Image<Rgba32> outputRgba32 = SixLabors.ImageSharp.Image.Load(outputNailByte);
  66.  
  67. //var result = MergeImageRgba32(templeRgba32, outputRgba32, 0, 0, format);
  68. //return result;
  69. #endregion
  70. }
  71. #endregion
  72.  
  73. #region 合并图片 字节 List集合
  74. /// <summary>
  75. /// 合并图片 字节 List集合
  76. /// </summary>
  77. /// <param name="backBase64">背景图片</param>
  78. /// <param name="ListBase64">合成图片集合</param>
  79. /// <returns></returns>
  80. public static ApiResult ImageCaoByte(byte[] backBase64, List<byte[]> ListBase64)
  81. {
  82. //base64转字节
  83. byte[] templebytes = backBase64;// Convert.FromBase64String(backBase64);
  84. //缩略图
  85. System.Drawing.Image temple = MakeThumbnail(templebytes, BackHeigth, BackHeigth, ThumbnailMode.Cut);
  86. //图片转字节
  87. byte[] templeNailByte = ImgToByt(temple);
  88.  
  89. ApiResult result = ApiResult.Fail(ApiEnum.OtherError, "请求失败");
  90.  
  91. var ListCount = ListBase64.Count;
  92. for (int i = ; i < ListCount; i++)
  93. {
  94. byte[] outputbytes = ListBase64[i];
  95. System.Drawing.Image output = MakeThumbnail(outputbytes, SizeWidth(ListCount, BackHeigth), SizeHeight(ListCount, BackHeigth), ThumbnailMode.Cut);
  96. byte[] outputNailByte = ImgToByt(output);
  97. Image<Rgba32> outputRgba32 = SixLabors.ImageSharp.Image.Load(outputNailByte);
  98.  
  99. //背景图
  100. IImageFormat format = null;
  101. Image<Rgba32> templeRgba32 = SixLabors.ImageSharp.Image.Load(templeNailByte, out format);
  102. //合并图片
  103. result = MergeImageRgba32(templeRgba32, outputRgba32, XWidth(ListCount, i + , BackHeigth), YHeight(ListCount, i + , BackHeigth), format);
  104.  
  105. if (i < ListCount - && result.Status)
  106. {
  107. var str = result.Data.ToString();
  108. var dataBase64 = str.Substring(str.IndexOf(',') + );
  109. templeNailByte = Convert.FromBase64String(dataBase64);
  110. }
  111. }
  112. return result;
  113. }
  114. #endregion
  115.  
  116. #region 合并图片 小图片放在大图片上面 MergeImageBase64
  117. /// <summary>
  118. /// 合并图片 小图片放在大图片上面 MergeImageBase64
  119. /// </summary>
  120. /// <param name="TempleBase64Str">模板大图片base64</param>
  121. /// <param name="OutputBase64Str">模板小图片base64</param>
  122. /// <param name="x">X坐标</param>
  123. /// <param name="y">y坐标</param>
  124. /// <returns></returns>
  125. public static ApiResult MergeImageBase64(string TempleBase64Str, string OutputBase64Str, int x, int y)
  126. {
  127. string strRet = null;
  128. if (string.IsNullOrEmpty(TempleBase64Str))
  129. {
  130. return ApiResult.Fail(ApiEnum.ParameterError, "请传入模板大图片base64");
  131. }
  132. if (string.IsNullOrEmpty(OutputBase64Str))
  133. {
  134. return ApiResult.Fail(ApiEnum.ParameterError, "请传入模板小图片base64");
  135. }
  136. if (x < || y < )
  137. {
  138. return ApiResult.Fail(ApiEnum.ParameterError, "坐标不能传入负数");
  139. }
  140. try
  141. {
  142. byte[] templebytes = Convert.FromBase64String(TempleBase64Str);
  143. byte[] outputbytes = Convert.FromBase64String(OutputBase64Str);
  144. IImageFormat format = null;
  145. var imagesTemle = SixLabors.ImageSharp.Image.Load(templebytes, out format);
  146. var outputImg = SixLabors.ImageSharp.Image.Load(outputbytes);
  147.  
  148. if (imagesTemle.Height - (outputImg.Height + y) <= )
  149. {
  150. return ApiResult.Fail(ApiEnum.ParameterError, "Y坐标高度超限");
  151. }
  152. if (imagesTemle.Width - (outputImg.Width + x) <= )
  153. {
  154. return ApiResult.Fail(ApiEnum.ParameterError, "X坐标宽度超限");
  155. }
  156. //进行多图片处理
  157. imagesTemle.Mutate(a =>
  158. {
  159. //还是合并
  160. a.DrawImage(outputImg, new SixLabors.Primitives.Point(x, y), );
  161. });
  162. strRet = imagesTemle.ToBase64String(format);
  163. return ApiResult.Success(strRet);
  164. }
  165. catch (Exception ex)
  166. {
  167. return ApiResult.Fail(ApiEnum.ParameterError, "报错信息" + ex.Message);
  168. }
  169. }
  170. #endregion
  171.  
  172. #region 合并图片 小图片放在大图片上面 MergeImageRgba32
  173. /// <summary>
  174. /// 合并图片 小图片放在大图片上面 MergeImageRgba32
  175. /// </summary>
  176. /// <param name="TempleByte">模板大图片Byte</param>
  177. /// <param name="OutputBaseByte">模板小图片Byte</param>
  178. /// <param name="x">X坐标</param>
  179. /// <param name="y">y坐标</param>
  180. /// <param name="format">format</param>
  181. /// <returns></returns>
  182. public static ApiResult MergeImageRgba32(Image<Rgba32> TempleByte, Image<Rgba32> OutputBaseByte, int x, int y, IImageFormat format)
  183. {
  184. string strRet = null;
  185. if (x < || y < )
  186. {
  187. return ApiResult.Fail(ApiEnum.ParameterError, "坐标不能传入负数");
  188. }
  189. try
  190. {
  191. var imagesTemle = TempleByte;
  192. var outputImg = OutputBaseByte;
  193.  
  194. if (imagesTemle.Height - (outputImg.Height + y) < )
  195. {
  196. return ApiResult.Fail(ApiEnum.ParameterError, "Y坐标高度超限");
  197. }
  198. if (imagesTemle.Width - (outputImg.Width + x) < )
  199. {
  200. return ApiResult.Fail(ApiEnum.ParameterError, "X坐标宽度超限");
  201. }
  202. //进行多图片处理
  203. imagesTemle.Mutate(a =>
  204. {
  205. //还是合并
  206. a.DrawImage(outputImg, new SixLabors.Primitives.Point(x, y), );
  207. });
  208. strRet = imagesTemle.ToBase64String(format);
  209. return ApiResult.Success(strRet, "成功");
  210. }
  211. catch (Exception ex)
  212. {
  213. return ApiResult.Fail(ApiEnum.ParameterError, "报错信息" + ex.Message);
  214. }
  215. }
  216. #endregion
  217.  
  218. #region 生成缩略图
  219. /// <summary>
  220. /// 生成缩略图
  221. /// </summary>
  222. /// <param name="imgBytes">源文件字节数组</param>
  223. /// <param name="width">缩略图宽度</param>
  224. /// <param name="height">缩略图高度</param>
  225. /// <param name="mode">缩略图方式</param>
  226. public static System.Drawing.Image MakeThumbnail(byte[] imgBytes, int width, int height, ThumbnailMode mode)
  227. {
  228. using (var sourceImage = FromBytes(imgBytes))
  229. {
  230. return MakeThumbnailThis(sourceImage, width, height, mode);
  231. }
  232. }
  233.  
  234. /// <summary>
  235. /// 生成缩略图
  236. /// </summary>
  237. /// <param name="sourceImage">源图</param>
  238. /// <param name="width">缩略图宽度</param>
  239. /// <param name="height">缩略图高度</param>
  240. /// <param name="mode">缩略图方式</param>
  241. public static System.Drawing.Image MakeThumbnailThis(System.Drawing.Image sourceImage, int width, int height, ThumbnailMode mode)
  242. {
  243. var towidth = width;
  244. var toheight = height;
  245.  
  246. var x = ;
  247. var y = ;
  248. var ow = sourceImage.Width;
  249. var oh = sourceImage.Height;
  250.  
  251. switch (mode)
  252. {
  253. case ThumbnailMode.FixedBoth:
  254. break;
  255. case ThumbnailMode.FixedW:
  256. toheight = oh * width / ow;
  257. break;
  258. case ThumbnailMode.FixedH:
  259. towidth = ow * height / oh;
  260. break;
  261. case ThumbnailMode.Cut:
  262. if (ow / (double)oh > towidth / (double)toheight)
  263. {
  264. oh = sourceImage.Height;
  265. ow = sourceImage.Height * towidth / toheight;
  266. y = ;
  267. x = (sourceImage.Width - ow) / ;
  268. }
  269. else
  270. {
  271. ow = sourceImage.Width;
  272. oh = sourceImage.Width * height / towidth;
  273. x = ;
  274. y = (sourceImage.Height - oh) / ;
  275. }
  276. break;
  277. }
  278. //1、新建一个BMP图片
  279. var bitmap = new Bitmap(towidth, toheight);
  280. //2、新建一个画板
  281. var g = Graphics.FromImage(bitmap);
  282. try
  283. {
  284. //3、设置高质量插值法
  285. g.InterpolationMode = InterpolationMode.High;
  286. //4、设置高质量,低速度呈现平滑程度
  287. g.SmoothingMode = SmoothingMode.HighQuality;
  288. //5、清空画布并以透明背景色填充
  289. g.Clear(Color.Transparent);
  290. //6、在指定位置并且按指定大小绘制原图片的指定部分
  291. g.DrawImage(sourceImage, new Rectangle(, , towidth, toheight), new Rectangle(x, y, ow, oh),
  292. GraphicsUnit.Pixel);
  293. return bitmap;
  294. }
  295. catch (Exception e)
  296. {
  297. throw e;
  298. }
  299. finally
  300. {
  301. g.Dispose();
  302. }
  303. }
  304. #endregion
  305.  
  306. #region 字节转换成图片流
  307. /// <summary>
  308. /// 字节转换成图片流
  309. /// </summary>
  310. /// <param name="bytes">字节数组</param>
  311. /// <returns></returns>
  312. public static System.Drawing.Image FromBytes(byte[] bytes)
  313. {
  314. using (var ms = new MemoryStream(bytes))
  315. {
  316. return System.Drawing.Image.FromStream(ms);
  317. }
  318. }
  319. #endregion
  320.  
  321. #region 图片流转换成字节
  322. /// <summary>
  323. /// 图片流转换成字节
  324. /// </summary>
  325. /// <param name="img">要转换的Image对象</param>
  326. /// <returns>转换后返回的字节流</returns>
  327. public static byte[] ImgToByt(System.Drawing.Image img)
  328. {
  329. MemoryStream ms = new MemoryStream();
  330. byte[] imagedata = null;
  331. img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
  332. imagedata = ms.GetBuffer();
  333. return imagedata;
  334. }
  335. #endregion
  336.  
  337. #region 根据http图片路径返回图片的字节流byte[]
  338. /// <summary>
  339. /// 根据http图片路径返回图片的字节流byte[]
  340. /// </summary>
  341. /// <param name="imagePath">图片路径</param>
  342. /// <returns>返回的字节流</returns>
  343. public static byte[] GetImageByte(string imagePath)
  344. {
  345. WebClient client = new WebClient();
  346. byte[] pageData = client.DownloadData(imagePath);
  347. return pageData;
  348. }
  349. #endregion
  350.  
  351. #region 根据本机图片路径返回图片的字节流byte[]
  352. /// <summary>
  353. /// 根据本机图片路径返回图片的字节流byte[]
  354. /// </summary>
  355. /// <param name="imagePath">图片路径</param>
  356. /// <returns>返回的字节流</returns>
  357. public static byte[] GetImageByteIam(string imagePath)
  358. {
  359. FileStream files = new FileStream(imagePath, FileMode.Open);
  360. byte[] imgByte = new byte[files.Length];
  361. files.Read(imgByte, , imgByte.Length);
  362. files.Close();
  363. return imgByte;
  364. }
  365. #endregion
  366.  
  367. #region 获取小的缩略图高度
  368. /// <summary>
  369. /// 获取小的缩略图高度
  370. /// </summary>
  371. /// <param name="Sum">总张数</param>
  372. /// <param name="BackHeigth">背景图片的大小</param>
  373. /// <returns></returns>
  374. public static int SizeHeight(int Sum, int BackHeigth)
  375. {
  376. if (Sum <= )
  377. {
  378. return BackHeigth / ;
  379. }
  380. else if (Sum > && Sum <= )
  381. {
  382. return BackHeigth / ;
  383. }
  384. return ;
  385. }
  386. #endregion
  387.  
  388. #region 获取小的缩略图宽度
  389. /// <summary>
  390. /// 获取小的缩略图宽度
  391. /// </summary>
  392. /// <param name="Sum">总张数</param>
  393. /// <param name="BackWidth">背景图片的大小</param>
  394. /// <returns></returns>
  395. public static int SizeWidth(int Sum, int BackWidth)
  396. {
  397. if (Sum <= )
  398. {
  399. return BackHeigth / ;
  400. }
  401. else if (Sum > && Sum <= )
  402. {
  403. return BackHeigth / ;
  404. }
  405. return ;
  406. }
  407. #endregion
  408.  
  409. #region 获取X坐标点
  410. /// <summary>
  411. /// 获取X坐标点
  412. /// </summary>
  413. /// <param name="Sum">总张数</param>
  414. /// <param name="Several">第几张图片</param>
  415. /// <param name="BackHeigth">背景图片的大小</param>
  416. /// <returns></returns>
  417. public static int XWidth(int Sum, int Several, int BackHeigth)
  418. {
  419. if (Sum == )
  420. {
  421. return (Several - ) * (BackHeigth / );
  422. }
  423. else if (Sum > && Sum <= )
  424. {
  425. if (Several % == )
  426. {
  427. return ;
  428. }
  429. else
  430. {
  431. return BackHeigth / ;
  432. }
  433. }
  434. else if (Sum > && Sum <= )
  435. {
  436. if (Several % == )
  437. {
  438. return ;
  439. }
  440. else if (Several % == )
  441. {
  442. return BackHeigth / ;
  443. }
  444. else
  445. {
  446. return (BackHeigth / ) * ;
  447. }
  448. }
  449. return ;
  450. }
  451. #endregion
  452.  
  453. #region 获取Y坐标点
  454. /// <summary>
  455. /// 获取Y坐标点
  456. /// </summary>
  457. /// <param name="Sum">总张数</param>
  458. /// <param name="Several">第几张图片</param>
  459. /// <param name="BackHeigth">背景图片的大小</param>
  460. /// <returns></returns>
  461. public static int YHeight(int Sum, int Several, int BackHeigth)
  462. {
  463. if (Sum == )
  464. {
  465. return BackHeigth / ;
  466. }
  467. else if (Sum > && Sum <= )
  468. {
  469. if (Several <= )
  470. {
  471. return ;
  472. }
  473. else
  474. {
  475. return BackHeigth / ;
  476. }
  477. }
  478. else if (Sum > && Sum <= )
  479. {
  480. if (Several <= )
  481. {
  482. return BackHeigth / ;
  483. }
  484. else
  485. {
  486. return BackHeigth / ;
  487. }
  488. }
  489. else if (Sum > && Sum <= )
  490. {
  491. if (Several <= )
  492. {
  493. return ;
  494. }
  495. else if (Several > && Several <= )
  496. {
  497. return BackHeigth / ;
  498. }
  499. else
  500. {
  501. return (BackHeigth / ) * ;
  502. }
  503. }
  504. return ;
  505. }
  506. #endregion
  507. }
  508. /// <summary>
  509. /// 缩略图模式
  510. /// </summary>
  511. public enum ThumbnailMode
  512. {
  513. /// <summary>
  514. /// 指定宽高裁剪(不变形)
  515. /// </summary>
  516. Cut = ,
  517. /// <summary>
  518. /// 指定宽度,高度自动
  519. /// </summary>
  520. FixedW = ,
  521. /// <summary>
  522. /// 指定高度,宽度自动
  523. /// </summary>
  524. FixedH = ,
  525. /// <summary>
  526. /// 指定宽高(变形)
  527. /// </summary>
  528. FixedBoth =
  529. }

.net core微信群图片合并的更多相关文章

  1. 一行实现QQ群组头像,微信群组,圆角等效果. 并支持url直接加载图片

    说点题外话. Coding中我们总是经历着这么几个过程. 学会使用: 不管是API也好, 开源库也好. 总是在最开始的学会去用. 了解实现原理: 可能会因为一些不兼容, 代码的异常状态的处理不够完美等 ...

  2. PHP 图片合成、仿微信群头像

    PHP 图片合成.仿微信群头像 参考文章: 作者:凯歌~,php图片合成方法(多张图片合成一张). 经过测试,略作调整和注释,感谢分享. 欢迎提出改善优化意见! 示例代码: /** * 合成图片 * ...

  3. Python如何实现微信群万人同步直播?

    很多人传言微信网页版(https://wx.qq.com/)接口已经被封了,所以所有的微信都不能登录网页版,这是错误的. 2019年7月微信对网页版微信进行了动态安全策略调整,导致一大批微信号不能登录 ...

  4. 微信群打卡机器人XiaoV项目开源 | 蔡培培的独立博客

    原文首发于蔡培培的独立博客.原文链接<微信群打卡机器人XiaoV项目开源>. 5月21日,在米花(后面" 亚里士多德式友谊"专题会提及)的影响下,决定搞个私人运动群,拉 ...

  5. 微信群API接口

    安卓微信的api,个人微信开发API协议,微信 ipad sdk,微信ipad协议,微信web版接口api,微信网页版接口,微信电脑版sdk,微信开发sdk,微信开发API,微信协议,微信接口文档sd ...

  6. 微信群里一道六年级数学题,求阴影面积,那我只能用python代码了

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  7. 利用python在微信群中签到、抢沙发(适用于任何账号)

    利用python在微信群中签到.抢沙发 注意 程序仅能在电脑上运行,运行时需要保证群界面在最前端且不被移动. 背景 我是一名高中生(2020年),疫情期间,在家上网课,有的老师让我们在班群里签到. 其 ...

  8. Android微信分享图片大于32k进行压缩

    微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: <span style="font-si ...

  9. 今天微信群需要人家通过吗?是微信bug吗

    今天遇到微信群拉人的问题,所以来和大家取经,刚开始拉人一下就拉进去了,后来拉的需要人家通过,今天朋友些也帮我拉人也是这样的,所以想问下微信群扩容的问题.晚上有位朋友跟我说一次拉十个人,不能拉多,这样就 ...

随机推荐

  1. 021 CSS高级特性

    一:元素的显示与影藏 1.比较常见的单词 dispaly,visibility,overflow 2.display案例 如果影藏了,这个元素就看不见了,然后也不保留位置 <!DOCTYPE h ...

  2. linux内核中的电源管理接口

    1. pm_runtime_enable/pm_runtime_disable 使能/禁止runtime PM,分别对dev->power.disable_depth执行++和--操作,这个变量 ...

  3. git如何删除远程tag?

    答: 分为两步: 1. 删除本地tag git tag -d tag-name 2. 删除远程tag git push origin :refs/tags/tag-name

  4. linux下apache安装ssl步骤

    制作证书: 参考:linux下运用opensll制作ssl证书 生成三个证书 server.crt .server-ca.crt.server.key 安装openssl tar -xzvf open ...

  5. Android开发--IntentService的用法,你错过了什么

    Android开发--IntentService的用法,你错过了什么 . 本文链接:https://blog.csdn.net/smbroe/article/details/45009721 Inte ...

  6. Web.Config中配置字符串含引号的处理

    配置文件中往往要用到一些特殊的字符, Web.Config默认编码格式为UTF-8,对于XML文件,要用到实体转义码来替换.对应关系如下: 字符 转义码 & 符号 & & 单引 ...

  7. List和List的区别?

    List<T>和List<?>的区别,这问的有点含糊.我想题主是想问类型参数“<T>”和无界通配符“<?>”的区别吧? 讨论“<T>&quo ...

  8. 【426】C 传递数组给函数

    参考:C 传递数组给函数 参考:C语言二维数组作为函数参数传递 参考:二维数组作为函数参数传递剖析(C语言)(6.19更新第5种) 总结: 一维数组参数,可以是地址.arr[].arr[n] 二维数组 ...

  9. Java Sound Capture from Microphone working code

    转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/java-sound-capture-from-microphone.html Soun ...

  10. Element 'repository' cannot have character [children], because the type's content type is element-only.

    出错现象 由于代码是网络上拷贝来的,可能存在特殊字符,在进行maven打包的时候报错 [ERROR] Malformed POM F:\ai开放平台\SRC\web知识产权申请\pom.xml: ex ...