Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于CamanJS的图像处理_Javascript_Html_Css_Image_Camanjs - Fatal编程技术网

Javascript 基于CamanJS的图像处理

Javascript 基于CamanJS的图像处理,javascript,html,css,image,camanjs,Javascript,Html,Css,Image,Camanjs,我发现一个名为“示例”的图像处理库看起来不错,所以我尝试使用它。我得到了以下html: <ion-view class="menu-content" view-title="Filter"> <ion-content overflow-scroll="true"> <div id="polaroid-filter-img" class="polaroid-filter-img"> <img id="pola

我发现一个名为“示例”的图像处理库看起来不错,所以我尝试使用它。我得到了以下html:

<ion-view class="menu-content" view-title="Filter">
    <ion-content overflow-scroll="true">
        <div id="polaroid-filter-img" class="polaroid-filter-img">
            <img id="polaroid-filter-img-img" ng-src="{{polaroid.cropped}}" />
        </div>
        <div class="polaroid-filter-examples">
            <div ng-repeat="filter in filters" ng-click="performFilter(filter.id)" id="filter.id">
                <img id="{{filter.id}}" ng-src="{{filter.image}}"/>
                <span>{{filter.name}}</span>
            </div>
        </div>
    </ion-content>
</ion-view>
这个JavaScript:

angular.module("App.Polaroids-Edit-Filter")

.controller("PolaroidsEditFilterController", function ($scope, $stateParams, PolaroidsService, FiltersService) {
    $scope.polaroid = PolaroidsService.getPolaroid($stateParams.id, $stateParams.size);
    $scope.filters = FiltersService.getFilters();

    var previousFilter = null;

    $scope.performFilter = function (id) {
        if (id != null && id != previousFilter) {
            if (previousFilter != null) {
                document.getElementById(previousFilter).style.border = "none";
            }

            document.getElementById(id).style.border = "solid #FF0000";

            if (id == "normal") {
                var image = document.getElementById("polaroid-filter-img-img");

                img.src = $scope.polaroid.cropped;
            } else {
                var image = document.getElementById("polaroid-filter-img-img");

                Caman(image, function () {
                    if (id == "vintage") {
                        this.vintage();
                    }

                    this.render(function () {
                        console.log("filtering finished");
                    });
                });   
            }

            previousFilter = id;
        }
    };

    function initView() {
        var width = screen.width * 0.7;
        var height = width;
        var initialId = $scope.filters[0].id;

        previousFilter = initialId;

        document.getElementById("polaroid-filter-img").style.width = width + "px";
        document.getElementById("polaroid-filter-img").style.height = height + "px";
        document.getElementById(initialId).style.border = "solid #FF0000";
    }

    var intervalId = setInterval(function () {
        initView();

        window.clearInterval(intervalId);
    }, 100);
});
当我启动应用程序并选择图片时,我会得到以下信息:

现在单击vintage过滤器时,会发生以下情况:

正如您所看到的,图像的大小被调整为真实的宽度和高度 大约20秒:

过滤器被应用。所以有两种奇怪的行为我不明白

  • 第一:为什么要调整图像的大小
  • 第二:为什么应用过滤器需要如此长的时间(20秒)?我发现了一个他们使用CamanJS的演示,在该演示中,过滤几乎立即执行:
你能帮我理解那里出了什么问题吗

编辑


如果我使用如图所示的画布,那么当应用过滤器时,画布就会消失。

我检查了您的代码,发现css有一个小问题。在您的班级
。宝丽来过滤器img img
,有
位置:绝对。这应该是
位置:相对。例如:

.polaroid-filter-img img {
    position: relative;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
}
我认为另一个问题是函数
initView
中的javascript。在该函数中,以下值出错
高度
宽度

    var width = screen.width * 0.7;
    var height = width;
    var initialId = $scope.filters[0].id;

请检查控制台日志中的
高度
宽度

,以防它仍然有助于您解决问题,请检查其他文章 那里的解决方案与Ionic+AngularJS+Phonegap配合得很好,没有奇怪的大小调整。
谢谢你的回答。该错误与css无关。宽度和高度也正确:
宽度:268.8,高度:268.8
。当我使用画布而不是图像时,画布在应用过滤器时会消失。调整camanjs执行的大小必须有原因。它的速度如此之慢也一定有原因。@Mulgard让你用
position:relative是。这不会改变任何事情。此错误与css无关。谢谢。这改变了调整大小的问题。速度缓慢的问题依然存在。例如,如果我想在一张2000 x 2000的图片上使用复古滤镜,需要14秒。如果我在一张100 x 100的图片上使用它,需要2秒钟。请确保使用该帖子代码中使用的“克隆”技巧。我将它与1.6MB 2048x1363 jpg文件一起使用,我的测试设备(Nexus4和Z1 Compact)很好地管理了它。我使用CamanJS和JSOperate库进行了测试,发现JSOperate速度更快(它的质量很可能更低,我不是一个纯粹主义者,对于一个基于手机的应用程序,我相信它已经足够好了:应用过滤大约需要1秒)。
    var width = screen.width * 0.7;
    var height = width;
    var initialId = $scope.filters[0].id;