написать впереди
Недавно я работал над небольшой программой и обнаружил, что создание и обмен фотографиями в кругу друзей является обязательным условием для каждого проекта. Я столкнулся со многими ямами, и писать было громоздко, и я не нашел похожих компонентов, поэтому написал один сам.
демо
слева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
-
Лучшие практики
Лучше всего при операциях рисования
锁住屏幕
, например, при нажатии, чтобы нарисоватьwx.showLoading({ title: '绘制分享图片中', mask: true })
После рисования
wx.hideLoading()
Для получения подробной информации см.
/pages/multiple
-
Как нарисовать QR-код и код апплета?
- Доступ к QR-коду и коду апплета можно получить, позвонивОфициальный интерфейс WeChatСгенерировано, требует внутреннего сотрудничества.
- затем перейти
type: image
типа рисовать.
-
Связанный с процессом рисования
-
views
Порядок в массиве представляет собой порядок рисования, и там будет покрытие. Пожалуйста, обратите внимание на всех пользователей.
-
-
Как добиться круглого аватара?
-
canvas
Невозможно нарисовать круглую картинку в , поэтому используйтеhack
способ достижения. Текущего эффекта можно добиться, покрыв аватарку картинкой с углублением посередине.
-
-
canvas drawer
Почему компонент не отображает монтажную область холста и ее содержимое напрямую?- Учитывая большинство сцен, мы привыкли сохранять картинку локально, либо для отображения.
- Сохранение его локально и возврат временного файла вызывающей стороне должно быть лучшим решением.
- Дисплей, после преобразования в картинки, можно использовать
image
Доступны все режимы отображения основных компонентов, а также можно настроить ширину и высоту.
TIPS
Если у вас есть вопросы, добро пожаловатьissues
. Если вы считаете, что это хорошо, можете ли вы отправить мне немного ✨✨, тогда у меня будет больше мотивации для обновления.