forked from mbk-lab/rui_orig
Added InlineImageFromResource function
This commit is contained in:
parent
42b34ac4df
commit
644ec6d8c5
|
@ -1,6 +1,7 @@
|
||||||
# v0.12.0
|
# v0.12.0
|
||||||
|
|
||||||
* Added SvgImageView
|
* Added SvgImageView
|
||||||
|
* Added InlineImageFromResource function
|
||||||
|
|
||||||
# v0.11.0
|
# v0.11.0
|
||||||
|
|
||||||
|
|
20
README-ru.md
20
README-ru.md
|
@ -2875,7 +2875,25 @@ TextView наследует от View все Свойства параметро
|
||||||
|
|
||||||
Выводимое изображение задается string Свойством "src" (константа Source).
|
Выводимое изображение задается string Свойством "src" (константа Source).
|
||||||
В качестве значения данному Свойству присваивается либо имя изображения в папке images ресурсов,
|
В качестве значения данному Свойству присваивается либо имя изображения в папке images ресурсов,
|
||||||
либо url изображения.
|
либо url изображения, либо inline-изображение.
|
||||||
|
|
||||||
|
inline-изображение это содержимое файла изображения закодированное в формате base64.
|
||||||
|
Для получения inline-изображение из ресурсов приложения используется функция
|
||||||
|
|
||||||
|
func InlineImageFromResource(filename string) (string, bool)
|
||||||
|
|
||||||
|
inline-изображения необходимо использовать в WebAssembly приложениях,
|
||||||
|
если вы хотите разместить изображения в ресурсах, а не на внешнем сервере.
|
||||||
|
inline-изображения могут вызывать фризы приложения в Safari, поэтому их лучше избегать.
|
||||||
|
Пример
|
||||||
|
|
||||||
|
if runtime.GOOS == "js" {
|
||||||
|
if image, ok := rui.InlineImageFromResource("image.png"); ok {
|
||||||
|
view.Set(rui.Source, image)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
view.Set(rui.Source, "image.png")
|
||||||
|
}
|
||||||
|
|
||||||
ImageView позволяет выводить разные изображения в зависимости от плотности экрана
|
ImageView позволяет выводить разные изображения в зависимости от плотности экрана
|
||||||
(см. раздел "Изображения для экранов с разной плотностью пикселей").
|
(см. раздел "Изображения для экранов с разной плотностью пикселей").
|
||||||
|
|
20
README.md
20
README.md
|
@ -2848,7 +2848,25 @@ To create an ImageView function is used:
|
||||||
func NewImageView(session Session, params Params) ImageView
|
func NewImageView(session Session, params Params) ImageView
|
||||||
|
|
||||||
The displayed image is specified by the string property "src" (Source constant).
|
The displayed image is specified by the string property "src" (Source constant).
|
||||||
As a value, this property is assigned either the name of the image in the "images" folder of the resources, or the url of the image.
|
As a value, this property is assigned either the name of the image in the "images" folder of the resources, or the url of the image, or inline-image.
|
||||||
|
|
||||||
|
An inline-image is the content of an image file encoded in base64 format.
|
||||||
|
To get an inline-image from the application resources, use the function
|
||||||
|
|
||||||
|
func InlineImageFromResource(filename string) (string, bool)
|
||||||
|
|
||||||
|
Inline-images must be used in WebAssembly applications
|
||||||
|
if you want to host images in resources rather than on an external server.
|
||||||
|
Inline-images can cause app freezes in Safari and should be avoided.
|
||||||
|
Example
|
||||||
|
|
||||||
|
if runtime.GOOS == "js" {
|
||||||
|
if image, ok := rui.InlineImageFromResource("image.png"); ok {
|
||||||
|
view.Set(rui.Source, image)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
view.Set(rui.Source, "image.png")
|
||||||
|
}
|
||||||
|
|
||||||
ImageView allows you to display different images depending on screen density
|
ImageView allows you to display different images depending on screen density
|
||||||
(See section "Images for screens with different pixel densities").
|
(See section "Images for screens with different pixel densities").
|
||||||
|
|
|
@ -5,8 +5,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var wasmMediaResources = false
|
|
||||||
|
|
||||||
//go:embed app_scripts.js
|
//go:embed app_scripts.js
|
||||||
var defaultScripts string
|
var defaultScripts string
|
||||||
|
|
||||||
|
|
25
image.go
25
image.go
|
@ -1,11 +1,7 @@
|
||||||
package rui
|
package rui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -83,27 +79,6 @@ func (manager *imageManager) loadImage(url string, onLoaded func(Image), session
|
||||||
image.loadingStatus = ImageLoading
|
image.loadingStatus = ImageLoading
|
||||||
manager.images[url] = image
|
manager.images[url] = image
|
||||||
|
|
||||||
if runtime.GOOS == "js" && wasmMediaResources {
|
|
||||||
if file, ok := resources.images[url]; ok && file.fs != nil {
|
|
||||||
|
|
||||||
dataType := map[string]string{
|
|
||||||
".svg": "data:image/svg+xml",
|
|
||||||
".png": "data:image/png",
|
|
||||||
".jpg": "data:image/jpg",
|
|
||||||
".jpeg": "data:image/jpg",
|
|
||||||
".gif": "data:image/gif",
|
|
||||||
}
|
|
||||||
ext := strings.ToLower(filepath.Ext(url))
|
|
||||||
if prefix, ok := dataType[ext]; ok {
|
|
||||||
if data, err := file.fs.ReadFile(file.path); err == nil {
|
|
||||||
session.callFunc("loadInlineImage", url, prefix+";base64,"+base64.StdEncoding.EncodeToString(data))
|
|
||||||
return image
|
|
||||||
} else {
|
|
||||||
DebugLog(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
session.callFunc("loadImage", url)
|
session.callFunc("loadImage", url)
|
||||||
return image
|
return image
|
||||||
}
|
}
|
||||||
|
|
25
imageView.go
25
imageView.go
|
@ -1,10 +1,7 @@
|
||||||
package rui
|
package rui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -272,27 +269,7 @@ func (imageView *imageViewData) src(src string) (string, string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if src != "" {
|
if src != "" {
|
||||||
srcset := imageView.srcSet(src)
|
return src, imageView.srcSet(src)
|
||||||
if runtime.GOOS == "js" && wasmMediaResources {
|
|
||||||
if image, ok := resources.images[src]; ok && image.fs != nil {
|
|
||||||
dataType := map[string]string{
|
|
||||||
".svg": "data:image/svg+xml",
|
|
||||||
".png": "data:image/png",
|
|
||||||
".jpg": "data:image/jpg",
|
|
||||||
".jpeg": "data:image/jpg",
|
|
||||||
".gif": "data:image/gif",
|
|
||||||
}
|
|
||||||
ext := strings.ToLower(filepath.Ext(src))
|
|
||||||
if prefix, ok := dataType[ext]; ok {
|
|
||||||
if data, err := image.fs.ReadFile(image.path); err == nil {
|
|
||||||
return prefix + ";base64," + base64.StdEncoding.EncodeToString(data), ""
|
|
||||||
} else {
|
|
||||||
DebugLog(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return src, srcset
|
|
||||||
}
|
}
|
||||||
return "", ""
|
return "", ""
|
||||||
}
|
}
|
||||||
|
|
30
utils.go
30
utils.go
|
@ -1,7 +1,9 @@
|
||||||
package rui
|
package rui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
"net"
|
"net"
|
||||||
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
@ -76,3 +78,31 @@ func dataFloatProperty(data DataObject, tag string) float64 {
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InlineImageFromResource reads image from resources and converts it to an inline image.
|
||||||
|
// Supported png, jpeg, gif, and svg files
|
||||||
|
func InlineImageFromResource(filename string) (string, bool) {
|
||||||
|
if image, ok := resources.images[filename]; ok && image.fs != nil {
|
||||||
|
dataType := map[string]string{
|
||||||
|
".svg": "data:image/svg+xml",
|
||||||
|
".png": "data:image/png",
|
||||||
|
".jpg": "data:image/jpg",
|
||||||
|
".jpeg": "data:image/jpg",
|
||||||
|
".gif": "data:image/gif",
|
||||||
|
}
|
||||||
|
ext := strings.ToLower(filepath.Ext(filename))
|
||||||
|
if prefix, ok := dataType[ext]; ok {
|
||||||
|
if data, err := image.fs.ReadFile(image.path); err == nil {
|
||||||
|
return prefix + ";base64," + base64.StdEncoding.EncodeToString(data), true
|
||||||
|
} else {
|
||||||
|
DebugLog(err.Error())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DebugLogF(`InlineImageFromResource("%s") error: Unsupported file`, filename)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DebugLogF(`The resource image "%s" not found`, filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue