Апплет WeChat: json помогает обмениваться фотографиями в кругу друзей

внешний интерфейс Апплет WeChat Canvas

написать впереди

Недавно я работал над небольшой программой и обнаружил, что создание и обмен фотографиями в кругу друзей является обязательным условием для каждого проекта. Я столкнулся со многими ямами, и писать было громоздко, и я не нашел похожих компонентов, поэтому написал один сам.

демо

слеваcanvasdrawerНарисовано, правая сторона - это изображение, предоставленное пользовательским интерфейсом.

характеристика

  • Простота в использовании - одинjsonПолучить изображение
  • Полный функционал - доволен90%сценарии использования
    • Нарисовать текст (перенос строки, многоточие вне содержания, подчеркивание, подчеркивание, полужирный текст)
    • рисовать картинки
    • нарисовать прямоугольник
    • сохранить изображение
    • Мультирисунок
    • ...
  • небольшое количество кода

опыт

git clone https://github.com/kuckboy1994/mp_canvas_drawer

Хотите использовать и настроить свои собственные на своем телефонеappidВот и все.

В режиме компиляции для вас настроены два часто используемых режима:

  • Обычный рисунок, нарисуйте единую общую картинку.
  • Рисование нескольких изображений, непрерывное рисование и обмен изображениями

использовать

  • git clone https://github.com/kuckboy1994/mp_canvas_drawerк местному

  • ПучокcomponentsсерединаcanvasdrawerСкопируйте в свой собственный проект.

  • Зарегистрируйте компонент на странице, используя

    {
      "usingComponents": {
        "canvasdrawer": "/components/canvasdrawer/canvasdrawer"
      }
    }
    
  • на странице**.wxmlДобавьте следующий код в файл

    <canvasdrawer painting="{{painting}}" bind:getImage="eventGetImage"/>
    

    paintingнеобходимо пройти вjson.getImageМетод является функцией обратного вызова после завершения рисования, вevent.detailВозвращает адрес изображения завершенного рисунка.

  • текущий каштанpaintingПросто покажу это. Пожалуйста, смотрите подробную конфигурациюAPI

    Картина (нажмите, чтобы расширить)
    {
      width: 375,
      height: 555,
      views: [
        {
          type: 'image',
          url: 'https://hybrid.xiaoying.tv/miniprogram/viva-ad/1/1531103986231.jpeg',
          top: 0,
          left: 0,
          width: 375,
          height: 555
        },
        {
          type: 'image',
          url: 'https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83epJEPdPqQVgv6D8bojGT4DrGXuEC4Oe0GXs5sMsN4GGpCegTUsBgL9SPJkN9UqC1s0iakjQpwd4h4A/132',
          top: 27.5,
          left: 29,
          width: 55,
          height: 55
        },
        {
          type: 'image',
          url: 'https://hybrid.xiaoying.tv/miniprogram/viva-ad/1/1531401349117.jpeg',
          top: 27.5,
          left: 29,
          width: 55,
          height: 55
        },
        {
          type: 'text',
          content: '您的好友【kuckboy】',
          fontSize: 16,
          color: '#402D16',
          textAlign: 'left',
          top: 33,
          left: 96,
          bolder: true
        },
        {
          type: 'text',
          content: '发现一件好货,邀请你一起0元免费拿!',
          fontSize: 15,
          color: '#563D20',
          textAlign: 'left',
          top: 59.5,
          left: 96
        },
        {
          type: 'image',
          url: 'https://hybrid.xiaoying.tv/miniprogram/viva-ad/1/1531385366950.jpeg',
          top: 136,
          left: 42.5,
          width: 290,
          height: 186
        },
        {
          type: 'image',
          url: 'https://hybrid.xiaoying.tv/miniprogram/viva-ad/1/1531385433625.jpeg',
          top: 443,
          left: 85,
          width: 68,
          height: 68
        },
        {
          type: 'text',
          content: '正品MAC魅可口红礼盒生日唇膏小辣椒Chili西柚情人',
          fontSize: 16,
          lineHeight: 21,
          color: '#383549',
          textAlign: 'left',
          top: 336,
          left: 44,
          width: 287,
          MaxLineNumber: 2,
          breakWord: true,
          bolder: true
        },
        {
          type: 'text',
          content: '¥0.00',
          fontSize: 19,
          color: '#E62004',
          textAlign: 'left',
          top: 387,
          left: 44.5,
          bolder: true
        },
        {
          type: 'text',
          content: '原价:¥138.00',
          fontSize: 13,
          color: '#7E7E8B',
          textAlign: 'left',
          top: 391,
          left: 110,
          textDecoration: 'line-through'
        },
        {
          type: 'text',
          content: '长按识别图中二维码帮我砍个价呗~',
          fontSize: 14,
          color: '#383549',
          textAlign: 'left',
          top: 460,
          left: 165.5,
          lineHeight: 20,
          MaxLineNumber: 2,
          breakWord: true,
          width: 125
        }
      ]
    }
    

API

Краткий обзор структуры объекта
{
  width: 375,
  height: 555,
  views: [
    {
      type: 'image',
      url: 'url',
      top: 0,
      left: 0,
      width: 375,
      height: 555
    },
    {
      type: 'text',
      content: 'content',
      fontSize: 16,
      color: '#402D16',
      textAlign: 'left',
      top: 33,
      left: 96,
      bolder: true
    },
    {
      type: 'rect',
      background: 'color',
      top: 0,
      left: 0,
      width: 375,
      height: 555
    }
  ]
}

Первый слой объекта данных требует трех параметров:width,height,views. Все номера в конфигурации не являются единицей. Это означаетcanvasРисование - это карта доли. Конкретный дисплей конкретно отображает возвращенный путь изображения непосредственно кimageв этикетке.

Текущий розыгрыш может быть три типа конфигурации:image,text,rect. В основном используются свойства конфигурацииcssНазвание горба относительно легко понять.

изображение

Атрибуты имея в виду По умолчанию необязательное значение
url Адрес нарисованного изображения, которое может быть локальным изображением, например:/images/1.jpeg
top Расстояние от верхнего левого угла до верхней части монтажной области
left Расстояние от верхнего левого угла до левой стороны монтажной области
width как широко рисовать 0
height как высоко рисовать 0

текст

Атрибуты имея в виду По умолчанию необязательное значение
content Нарисованное образец адреса '' (пустой строки)
color цвет black
fontSize размер шрифта 16
textAlign выравнивание текста left центр, справа
lineHeight Высота строки, полезная только в многострочном тексте 20
top Расстояние от верхнего левого угла текста до верхней части монтажной области 0
left Расстояние от верхнего левого угла текста до левой стороны монтажной области 0
breakWord нужно ли обернуть false true
MaxLineNumber Максимальное количество строк, только установитьbreakWord: true, текущее свойство допустимо, а содержимое, превышающее количество строк, отображается как... 2
width а такжеMaxLineNumberсвойства используются вместе,widthдолжен достичь ширины новой строки
bolder стоит ли жирным шрифтом false true
textDecoration Отображение эффектов средней линии и подчеркивания none подчеркивание, сквозной

прямоугольник (прямоугольник, линия)

Атрибуты имея в виду По умолчанию необязательное значение
background фоновый цвет black
top Расстояние от верхнего левого угла до верхней части монтажной области
left Расстояние от верхнего левого угла до левой стороны монтажной области
width как широко рисовать 0
height как высоко рисовать 0

Q&A

  1. Лучшие практики

    Лучше всего при операциях рисования锁住屏幕, например, при нажатии, чтобы нарисовать

    wx.showLoading({
      title: '绘制分享图片中',
      mask: true
    })
    

    После рисования

    wx.hideLoading()
    

    Для получения подробной информации см./pages/multiple

  2. Как нарисовать QR-код и код апплета?

    • Доступ к QR-коду и коду апплета можно получить, позвонивОфициальный интерфейс WeChatСгенерировано, требует внутреннего сотрудничества.
    • затем перейтиtype: imageтипа рисовать.
  3. Связанный с процессом рисования

    • viewsПорядок в массиве представляет собой порядок рисования, и там будет покрытие. Пожалуйста, обратите внимание на всех пользователей.
  4. Как добиться круглого аватара?

    • canvasНевозможно нарисовать круглую картинку в , поэтому используйтеhackспособ достижения. Текущего эффекта можно добиться, покрыв аватарку картинкой с углублением посередине.
  5. canvas drawerПочему компонент не отображает монтажную область холста и ее содержимое напрямую?

    • Учитывая большинство сцен, мы привыкли сохранять картинку локально, либо для отображения.
    • Сохранение его локально и возврат временного файла вызывающей стороне должно быть лучшим решением.
    • Дисплей, после преобразования в картинки, можно использоватьimageДоступны все режимы отображения основных компонентов, а также можно настроить ширину и высоту.

TIPS

Если у вас есть вопросы, добро пожаловатьissues. Если вы считаете, что это хорошо, можете ли вы отправить мне немного ✨✨, тогда у меня будет больше мотивации для обновления.

гитхаб:GitHub.com/inventory Ка Бойе 1994...