zartui 2.1.30 → 2.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/index.js CHANGED
@@ -76,7 +76,7 @@ import TextEllipsis from './text-ellipsis';
76
76
  import Timeline from './timeline';
77
77
  import Toast from './toast';
78
78
  import Uploader from './uploader';
79
- var version = '2.1.30';
79
+ var version = '2.1.32';
80
80
  function install(Vue) {
81
81
  var components = [ActionSheet, Area, Avatar, BackTop, Badge, Button, Calendar, Cascader, Cell, CellGroup, Checkbox, CheckboxGroup, Col, Collapse, CollapseItem, CountDown, DatetimePicker, Dialog, Divider, DropdownItem, DropdownMenu, Empty, Field, FoldDialog, Form, Grid, GridItem, HierarchySelect, Icon, Image, ImagePreview, IndexAnchor, IndexBar, Info, Lazyload, List, Loading, Locale, MediaPicker, MediaPlayer, MultiplePicker, NavBar, NoticeBar, NumberKeyboard, Overlay, PasswordInput, Picker, Popover, Popup, PullRefresh, Radio, RadioGroup, Rate, Row, Search, Signature, Skeleton, Slider, SpeechRecognizer, Step, Stepper, Steps, Sticky, Swipe, SwipeCell, SwipeItem, Switch, SwitchCell, Tab, Tabbar, TabbarItem, Table, Tabs, Tag, TextEllipsis, Timeline, Toast, Uploader];
82
82
  components.forEach(function (item) {
@@ -56,6 +56,10 @@ export default createComponent({
56
56
  type: Boolean,
57
57
  default: false
58
58
  },
59
+ keepFileType: {
60
+ type: Boolean,
61
+ default: false
62
+ },
59
63
  mediaList: {
60
64
  type: Array,
61
65
  default: function _default() {
@@ -568,6 +572,21 @@ export default createComponent({
568
572
  }
569
573
  return validFiles;
570
574
  },
575
+ /**
576
+ * 根据 MIME 类型获取文件扩展名
577
+ */
578
+ getExtensionFromMimeType: function getExtensionFromMimeType(mimeType) {
579
+ var mimeToExt = {
580
+ 'image/jpeg': 'jpg',
581
+ 'image/jpg': 'jpg',
582
+ 'image/png': 'png',
583
+ 'image/gif': 'gif',
584
+ 'image/webp': 'webp',
585
+ 'image/bmp': 'bmp',
586
+ 'image/svg+xml': 'svg'
587
+ };
588
+ return mimeToExt[mimeType] || 'jpg';
589
+ },
571
590
  /**
572
591
  * 转换图片文件,压缩、加水印,返回Media格式的图片
573
592
  * @param files 图片文件
@@ -577,7 +596,7 @@ export default createComponent({
577
596
  var _this6 = this;
578
597
  var promisesTodo = [];
579
598
  var resizeOptions = new ResizeOptions(this.maxImageSideLength);
580
- var compressOptions = new CompressOptions(this.maxImageFileSize);
599
+ var compressOptions = new CompressOptions(this.maxImageFileSize, this.keepFileType);
581
600
  var _loop = function _loop() {
582
601
  var inputFile = files[i];
583
602
  var watermarkEnabled = _this6.watermarkOptions && _this6.watermarkOptions.watermarkConfigString && checkWatermarkConfigSupported(_this6.watermarkOptions.watermarkConfigString);
@@ -605,7 +624,9 @@ export default createComponent({
605
624
  return Promise.resolve();
606
625
  }
607
626
  return file2DataURL(f).then(function (base64) {
608
- var uniqueFileName = getUniqueFileName(f, 'jpg');
627
+ // 根据 keepFileType 决定使用的扩展名
628
+ var ext = _this6.keepFileType ? _this6.getExtensionFromMimeType(f.type) : 'jpg';
629
+ var uniqueFileName = getUniqueFileName(f, ext);
609
630
  return Promise.resolve({
610
631
  showSrc: base64,
611
632
  type: MediaType.PHOTO,
package/lib/index.js CHANGED
@@ -161,7 +161,7 @@ var _toast = _interopRequireDefault(require("./toast"));
161
161
  exports.Toast = _toast.default;
162
162
  var _uploader = _interopRequireDefault(require("./uploader"));
163
163
  exports.Uploader = _uploader.default;
164
- var version = exports.version = '2.1.30';
164
+ var version = exports.version = '2.1.32';
165
165
  function install(Vue) {
166
166
  var components = [_actionSheet.default, _area.default, _avatar.default, _backTop.default, _badge.default, _button.default, _calendar.default, _cascader.default, _cell.default, _cellGroup.default, _checkbox.default, _checkboxGroup.default, _col.default, _collapse.default, _collapseItem.default, _countDown.default, _datetimePicker.default, _dialog.default, _divider.default, _dropdownItem.default, _dropdownMenu.default, _empty.default, _field.default, _foldDialog.default, _form.default, _grid.default, _gridItem.default, _hierarchySelect.default, _icon.default, _image.default, _imagePreview.default, _indexAnchor.default, _indexBar.default, _info.default, _lazyload.default, _list.default, _loading.default, _locale.default, _mediaPicker.default, _mediaPlayer.default, _multiplePicker.default, _navBar.default, _noticeBar.default, _numberKeyboard.default, _overlay.default, _passwordInput.default, _picker.default, _popover.default, _popup.default, _pullRefresh.default, _radio.default, _radioGroup.default, _rate.default, _row.default, _search.default, _signature.default, _skeleton.default, _slider.default, _speechRecognizer.default, _step.default, _stepper.default, _steps.default, _sticky.default, _swipe.default, _swipeCell.default, _swipeItem.default, _switch.default, _switchCell.default, _tab.default, _tabbar.default, _tabbarItem.default, _table.default, _tabs.default, _tag.default, _textEllipsis.default, _timeline.default, _toast.default, _uploader.default];
167
167
  components.forEach(function (item) {
@@ -62,6 +62,10 @@ var _default2 = exports.default = createComponent({
62
62
  type: Boolean,
63
63
  default: false
64
64
  },
65
+ keepFileType: {
66
+ type: Boolean,
67
+ default: false
68
+ },
65
69
  mediaList: {
66
70
  type: Array,
67
71
  default: function _default() {
@@ -574,6 +578,21 @@ var _default2 = exports.default = createComponent({
574
578
  }
575
579
  return validFiles;
576
580
  },
581
+ /**
582
+ * 根据 MIME 类型获取文件扩展名
583
+ */
584
+ getExtensionFromMimeType: function getExtensionFromMimeType(mimeType) {
585
+ var mimeToExt = {
586
+ 'image/jpeg': 'jpg',
587
+ 'image/jpg': 'jpg',
588
+ 'image/png': 'png',
589
+ 'image/gif': 'gif',
590
+ 'image/webp': 'webp',
591
+ 'image/bmp': 'bmp',
592
+ 'image/svg+xml': 'svg'
593
+ };
594
+ return mimeToExt[mimeType] || 'jpg';
595
+ },
577
596
  /**
578
597
  * 转换图片文件,压缩、加水印,返回Media格式的图片
579
598
  * @param files 图片文件
@@ -583,7 +602,7 @@ var _default2 = exports.default = createComponent({
583
602
  var _this6 = this;
584
603
  var promisesTodo = [];
585
604
  var resizeOptions = new _appMediaUtils.ResizeOptions(this.maxImageSideLength);
586
- var compressOptions = new _appMediaUtils.CompressOptions(this.maxImageFileSize);
605
+ var compressOptions = new _appMediaUtils.CompressOptions(this.maxImageFileSize, this.keepFileType);
587
606
  var _loop = function _loop() {
588
607
  var inputFile = files[i];
589
608
  var watermarkEnabled = _this6.watermarkOptions && _this6.watermarkOptions.watermarkConfigString && (0, _appMediaUtils.checkWatermarkConfigSupported)(_this6.watermarkOptions.watermarkConfigString);
@@ -611,7 +630,9 @@ var _default2 = exports.default = createComponent({
611
630
  return Promise.resolve();
612
631
  }
613
632
  return (0, _appMediaUtils.file2DataURL)(f).then(function (base64) {
614
- var uniqueFileName = (0, _mediaUtil.getUniqueFileName)(f, 'jpg');
633
+ // 根据 keepFileType 决定使用的扩展名
634
+ var ext = _this6.keepFileType ? _this6.getExtensionFromMimeType(f.type) : 'jpg';
635
+ var uniqueFileName = (0, _mediaUtil.getUniqueFileName)(f, ext);
615
636
  return Promise.resolve({
616
637
  showSrc: base64,
617
638
  type: _type.MediaType.PHOTO,
package/lib/zart.js CHANGED
@@ -19862,7 +19862,7 @@ function drawGroupedWatermarks(canvas, watermarks, groupPosition) {
19862
19862
  const tile = buildTile(canvas, watermark);
19863
19863
  if (tile) {
19864
19864
  tiles.push(tile);
19865
- totalHeight += tile.size.height + CONTENT_PADDING;
19865
+ totalHeight += tile.size.height + tile.style.paddingTop + tile.style.paddingBottom;
19866
19866
  }
19867
19867
  }
19868
19868
  if (totalHeight <= 0) {
@@ -19872,19 +19872,15 @@ function drawGroupedWatermarks(canvas, watermarks, groupPosition) {
19872
19872
  }
19873
19873
  const contentPadding = getCanvasScale(canvas, CONTENT_PADDING);
19874
19874
  let baseOrigin = new Point(contentPadding, contentPadding);
19875
- let titlePadding = 0;
19876
19875
  if (groupPosition === "center" /* Center */) {
19877
19876
  baseOrigin = new Point(
19878
19877
  contentPadding,
19879
19878
  Math.round((canvas.height - totalHeight) / 2)
19880
19879
  );
19881
19880
  } else if (groupPosition === "bottom" /* Bottom */) {
19882
- tiles.forEach((item) => {
19883
- titlePadding += item.style.paddingTop + item.style.paddingBottom;
19884
- });
19885
19881
  baseOrigin = new Point(
19886
19882
  contentPadding,
19887
- canvas.height - totalHeight - contentPadding - titlePadding
19883
+ canvas.height - totalHeight - contentPadding
19888
19884
  );
19889
19885
  } else if (groupPosition === "top" /* Top */) {
19890
19886
  baseOrigin = new Point(contentPadding, contentPadding);
@@ -20018,9 +20014,10 @@ function image2Canvas(img, type, width, height) {
20018
20014
  canvas.height = _height;
20019
20015
  const ctx = canvas.getContext("2d");
20020
20016
  if (ctx) {
20021
- ctx.fillStyle = "transparent";
20022
- if (type === "image/jpeg") {
20017
+ const needWhiteBackground = type === "image/jpeg" || type === "image/jpg" || type === "image/bmp";
20018
+ if (needWhiteBackground) {
20023
20019
  ctx.fillStyle = "#fff";
20020
+ ctx.fillRect(0, 0, _width, _height);
20024
20021
  }
20025
20022
  ctx.drawImage(img, 0, 0, _width, _height);
20026
20023
  return Promise.resolve(canvas);
@@ -20033,18 +20030,20 @@ function canvas2Image(canvas, type = "image/jpeg", quality = 0.8) {
20033
20030
  image.src = canvas.toDataURL(type, quality);
20034
20031
  return Promise.resolve(image);
20035
20032
  }
20036
- function canvas2File(canvas, fileName, lastModified, type = "image/jpeg", quality = 0.8) {
20033
+ function canvas2File(canvas, fileName, lastModified, type = "image/jpeg", quality = 0.8, forceFileType) {
20037
20034
  return new Promise((resolve, reject) => {
20035
+ const blobType = type === "image/gif" ? "image/png" : type;
20038
20036
  canvas.toBlob(
20039
20037
  (blob) => {
20040
20038
  if (!blob) {
20041
20039
  reject(new Error("canvas文件导出失败"));
20042
20040
  } else {
20043
- const file = new File([blob], fileName, { lastModified, type });
20041
+ const fileType = forceFileType || type;
20042
+ const file = new File([blob], fileName, { lastModified, type: fileType });
20044
20043
  resolve(file);
20045
20044
  }
20046
20045
  },
20047
- type,
20046
+ blobType,
20048
20047
  quality
20049
20048
  );
20050
20049
  });
@@ -20105,13 +20104,14 @@ var ResizeOptions = class {
20105
20104
  }
20106
20105
  };
20107
20106
  var CompressOptions = class {
20108
- // 图片大小限制,单位kb
20109
- constructor(photoFileSizeLimit) {
20107
+ // 是否保持原始文件类型
20108
+ constructor(photoFileSizeLimit, keepFileType = false) {
20110
20109
  if (checkIsUndefinedOrNull(photoFileSizeLimit)) {
20111
20110
  this.photoFileSizeLimit = PHOTO_FILE_SIZE_LIMIT;
20112
20111
  } else {
20113
20112
  this.photoFileSizeLimit = photoFileSizeLimit;
20114
20113
  }
20114
+ this.keepFileType = keepFileType;
20115
20115
  }
20116
20116
  };
20117
20117
  var ImageProcessor = class {
@@ -20125,12 +20125,15 @@ var ImageProcessor = class {
20125
20125
  process() {
20126
20126
  const filename = this.file.name;
20127
20127
  const { lastModified } = this.file;
20128
- let fileType = this.file.type;
20129
- if (this.file.size > this.compressOptions.photoFileSizeLimit * 1024) {
20130
- fileType = "image/jpeg";
20131
- }
20132
- if (fileType === "image/gif") {
20133
- fileType = "image/png";
20128
+ const originalFileType = this.file.type;
20129
+ let fileType = originalFileType;
20130
+ if (!this.compressOptions.keepFileType) {
20131
+ if (this.file.size > this.compressOptions.photoFileSizeLimit * 1024) {
20132
+ fileType = "image/jpeg";
20133
+ }
20134
+ if (fileType === "image/gif") {
20135
+ fileType = "image/png";
20136
+ }
20134
20137
  }
20135
20138
  return file2Image(this.file).then((img) => {
20136
20139
  return resize(img, {
@@ -20142,18 +20145,43 @@ var ImageProcessor = class {
20142
20145
  const canvas = result;
20143
20146
  return yield renderWatermark(canvas, this.watermarkOptions);
20144
20147
  })).then((canvas) => {
20145
- const exportFilename = filename.replace(/\./g, "-") + ".jpg";
20148
+ let exportFilename;
20149
+ if (this.compressOptions.keepFileType) {
20150
+ const ext = this.getExtensionFromMimeType(fileType);
20151
+ exportFilename = filename.replace(/\.[^.]+$/, "") + "." + ext;
20152
+ } else {
20153
+ exportFilename = filename.replace(/\./g, "-") + ".jpg";
20154
+ }
20146
20155
  return this.compress(
20147
20156
  canvas,
20148
20157
  exportFilename,
20149
20158
  lastModified,
20150
20159
  fileType,
20151
- DEFAULT_JPEG_QUALITY
20160
+ DEFAULT_JPEG_QUALITY,
20161
+ -1,
20162
+ originalFileType
20163
+ // 传入原始文件类型,用于GIF等特殊格式
20152
20164
  );
20153
20165
  });
20154
20166
  }
20155
- compress(canvas, filename, lastModified, type, quality, lastCompressFileSize = -1) {
20156
- return canvas2File(canvas, filename, lastModified, type, quality).then(
20167
+ /**
20168
+ * 根据 MIME 类型获取文件扩展名
20169
+ */
20170
+ getExtensionFromMimeType(mimeType) {
20171
+ const mimeToExt = {
20172
+ "image/jpeg": "jpg",
20173
+ "image/jpg": "jpg",
20174
+ "image/png": "png",
20175
+ "image/gif": "gif",
20176
+ "image/webp": "webp",
20177
+ "image/bmp": "bmp",
20178
+ "image/svg+xml": "svg"
20179
+ };
20180
+ return mimeToExt[mimeType] || "jpg";
20181
+ }
20182
+ compress(canvas, filename, lastModified, type, quality, lastCompressFileSize = -1, originalFileType) {
20183
+ const forceFileType = originalFileType === "image/gif" ? originalFileType : void 0;
20184
+ return canvas2File(canvas, filename, lastModified, type, quality, forceFileType).then(
20157
20185
  (file) => {
20158
20186
  let qualityStep = JPEG_QUALITY_STEP;
20159
20187
  if (file.size > this.compressOptions.photoFileSizeLimit * 1024) {
@@ -20173,7 +20201,8 @@ var ImageProcessor = class {
20173
20201
  lastModified,
20174
20202
  type,
20175
20203
  this.roundToDecimalPlace(nextCompressQuality, 2),
20176
- file.size
20204
+ file.size,
20205
+ originalFileType
20177
20206
  );
20178
20207
  } else {
20179
20208
  return Promise.resolve(file);
@@ -24835,6 +24864,10 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
24835
24864
  type: Boolean,
24836
24865
  default: false
24837
24866
  },
24867
+ keepFileType: {
24868
+ type: Boolean,
24869
+ default: false
24870
+ },
24838
24871
  mediaList: {
24839
24872
  type: Array,
24840
24873
  default: function _default() {
@@ -25347,6 +25380,21 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
25347
25380
  }
25348
25381
  return validFiles;
25349
25382
  },
25383
+ /**
25384
+ * 根据 MIME 类型获取文件扩展名
25385
+ */
25386
+ getExtensionFromMimeType: function getExtensionFromMimeType(mimeType) {
25387
+ var mimeToExt = {
25388
+ 'image/jpeg': 'jpg',
25389
+ 'image/jpg': 'jpg',
25390
+ 'image/png': 'png',
25391
+ 'image/gif': 'gif',
25392
+ 'image/webp': 'webp',
25393
+ 'image/bmp': 'bmp',
25394
+ 'image/svg+xml': 'svg'
25395
+ };
25396
+ return mimeToExt[mimeType] || 'jpg';
25397
+ },
25350
25398
  /**
25351
25399
  * 转换图片文件,压缩、加水印,返回Media格式的图片
25352
25400
  * @param files 图片文件
@@ -25356,7 +25404,7 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
25356
25404
  var _this6 = this;
25357
25405
  var promisesTodo = [];
25358
25406
  var resizeOptions = new ResizeOptions(this.maxImageSideLength);
25359
- var compressOptions = new CompressOptions(this.maxImageFileSize);
25407
+ var compressOptions = new CompressOptions(this.maxImageFileSize, this.keepFileType);
25360
25408
  var _loop = function _loop() {
25361
25409
  var inputFile = files[i];
25362
25410
  var watermarkEnabled = _this6.watermarkOptions && _this6.watermarkOptions.watermarkConfigString && checkWatermarkConfigSupported(_this6.watermarkOptions.watermarkConfigString);
@@ -25384,7 +25432,9 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
25384
25432
  return Promise.resolve();
25385
25433
  }
25386
25434
  return file2DataURL(f).then(function (base64) {
25387
- var uniqueFileName = getUniqueFileName(f, 'jpg');
25435
+ // 根据 keepFileType 决定使用的扩展名
25436
+ var ext = _this6.keepFileType ? _this6.getExtensionFromMimeType(f.type) : 'jpg';
25437
+ var uniqueFileName = getUniqueFileName(f, ext);
25388
25438
  return Promise.resolve({
25389
25439
  showSrc: base64,
25390
25440
  type: MediaType.PHOTO,
@@ -35625,7 +35675,7 @@ var uploader_createNamespace = Object(utils["b" /* createNamespace */])('uploade
35625
35675
 
35626
35676
 
35627
35677
 
35628
- var es_version = '2.1.30';
35678
+ var es_version = '2.1.32';
35629
35679
  function install(Vue) {
35630
35680
  var components = [action_sheet, es_area, avatar, back_top, badge, es_button, calendar, cascader, cell, cell_group, es_checkbox, checkbox_group, col, collapse, collapse_item, count_down, datetime_picker, dialog, divider, dropdown_item, dropdown_menu, empty, es_field, fold_dialog, es_form, grid, grid_item, hierarchy_select, es_icon, es_image, image_preview, index_anchor, index_bar, es_info, lazyload, es_list, es_loading, locale["a" /* default */], media_picker, media_player, multiple_picker, nav_bar, notice_bar, number_keyboard, es_overlay, password_input, es_picker, popover, popup, pull_refresh, es_radio, radio_group, rate, row, search, signature, skeleton, slider, speech_recognizer, es_step, stepper, steps, es_sticky, swipe, swipe_cell, swipe_item, es_switch, switch_cell, tab, tabbar, tabbar_item, table, tabs, es_tag, text_ellipsis, timeline, es_toast, uploader];
35631
35681
  components.forEach(function (item) {