GVKun编程网logo

上传裁剪后的图像不起作用 CropperJs(上传照片裁剪框不会动)

20

如果您想了解上传裁剪后的图像不起作用CropperJs和上传照片裁剪框不会动的知识,那么本篇文章将是您的不二之选。我们将深入剖析上传裁剪后的图像不起作用CropperJs的各个方面,并为您解答上传照片

如果您想了解上传裁剪后的图像不起作用 CropperJs上传照片裁剪框不会动的知识,那么本篇文章将是您的不二之选。我们将深入剖析上传裁剪后的图像不起作用 CropperJs的各个方面,并为您解答上传照片裁剪框不会动的疑在这篇文章中,我们将为您介绍上传裁剪后的图像不起作用 CropperJs的相关知识,同时也会详细的解释上传照片裁剪框不会动的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

上传裁剪后的图像不起作用 CropperJs(上传照片裁剪框不会动)

上传裁剪后的图像不起作用 CropperJs(上传照片裁剪框不会动)

如何解决上传裁剪后的图像不起作用 CropperJs?

我有 2 个问题,我正在编写一个 javascript 脚本,其中包含以下代码

<script type="text/javascript" >
        function readURL(input) {
            if (input.files && input.files[0]) {
                var reader = new FileReader();
                reader.onload = function (e) {
                    $(''#imageId'').attr(''src'',e.target.result)
                };
                reader.readAsDataURL(input.files[0]);
                setTimeout(initCropper,1000);
            }
        }
        function initCropper(){
            var image = document.getElementById(''blah'');
            var cropper = new Cropper(image,{
              aspectRatio: 1 / 1,crop: function(e) {
                console.log(e.detail.x);
                console.log(e.detail.y);
              }
            });
    
            // On crop button clicked
            document.getElementById(''crop_button'').addEventListener(''click'',function(){
                var imgurl =  cropper.getCroppedCanvas().toDataURL();
                var img = document.createElement("img");
                img.src = imgurl;
                document.getElementById("cropped_result").appendChild(img);
    
                //sending cropped image to server
    
                    cropper.getCroppedCanvas().toBlob(function (blob) {
                          var formData = new FormData();
                          formData.append(''croppedImage'',blob);
                          // Use `jQuery.ajax` method
                          path = ''C:/Users/Andy/Desktop/javascript/croppingwcropperjs/uploads'';
                          $.ajax(path,{
                            method: "POST",data: formData,processData: false,contentType: false,success: function () {
                              console.log(''Upload success'');
                            },error: function () {
                              console.log(''Upload error'');
                            }
                          });
                    });
              
            })
        }
    </script>

这是它的html部分

<! DOCTYPE html>
<html>
<head>
       <script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.4.1/cropper.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <script name="jquery-croper-script">
        !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(require("jquery"),require("cropperjs")):"function"==typeof define&&define.amd?define(["jquery","cropperjs"],r):r(e.jQuery,e.Cropper)}(this,function(c,s){"use strict";if(c=c&&c.hasOwnProperty("default")?c.default:c,s=s&&s.hasOwnProperty("default")?s.default:s,c.fn){var e=c.fn.cropper,d="cropper";c.fn.cropper=function(p){for(var e=arguments.length,a=Array(1<e?e-1:0),r=1;r<e;r++)a[r-1]=arguments[r];var u=void 0;return this.each(function(e,r){var t=c(r),n="destroy"===p,o=t.data(d);if(!o){if(n)return;var f=c.extend({},t.data(),c.isPlainObject(p)&&p);o=new s(r,f),t.data(d,o)}if("string"==typeof p){var i=o[p];c.isFunction(i)&&((u=i.apply(o,a))===o&&(u=void 0),n&&t.removeData(d))}}),void 0!==u?u:this},c.fn.cropper.Constructor=s,c.fn.cropper.setDefaults=s.setDefaults,c.fn.cropper.noConflict=function(){return c.fn.cropper=e,this}}});
        </script>

        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.4.1/cropper.min.css" />

    </head>
<body>
    <input type="file" name="image" id="image" onchange="readURL(this);"/>
    <div>
        <img id="imageId" src="#" alt="your image" />
    </div>
    <div id="cropped_result"></div>        
    <button id="crop_button">Crop</button>
</body>
</html>

好的。使用上面的代码,我打算裁剪图像并将裁剪后的版本保存在我名为 uploads 的文件夹中。我设法裁剪了图像,但是我无法保存裁剪后的图像。我的问题是:

  1. 为了将裁剪后的图像成功提交到上传文件夹中,路径格式应该是什么?
  2. 我已经看到一些人为路径创建了一个 PHP 脚本,比如 uploads.PHP 是否必须让路径成为 PHP 中的脚本。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

android-我只想将裁剪后的图像保存到图库中.但会保存原始的完整图像.如何仅保存裁切后的图像?

android-我只想将裁剪后的图像保存到图库中.但会保存原始的完整图像.如何仅保存裁切后的图像?

public class ImageCroppMainActivity extends Activity implements OnClickListener{

final int CAMERA_CAPTURE = 1;

//keep track of cropping intent

final int PIC_CROP = 2;

//captured picture uri

private Uri picUri;

final int PICK_IMAGE = 3;   

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_image_cropp_main); 

    //retrieve a reference to the UI button

    Button captureBtn = (Button)findViewById(R.id.capture_btn);

    //handle button clicks

    captureBtn.setonClickListener(this);

    Button browseBtn = (Button)findViewById(R.id.browse_btn);

    //handle button clicks

    browseBtn.setonClickListener(this);

}



public void onClick(View v) {

    if (v.getId() == R.id.capture_btn) {   

        try {

            //use standard intent to capture an image

            Intent captureIntent = new 
Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            //we will handle the returned data in onActivityResult

startActivityForResult(captureIntent, CAMERA_CAPTURE);

}

catch(ActivityNotFoundException anfe){

//display an error message

String errorMessage = "Whoops - your device doesn't support capturing images!";

Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);

toast.show();

}  

}

else if(v.getId() == R.id.browse_btn)

{

//use standard intent to capture an image

Intent intent = new Intent(Intent.ACTION_PICK, 

android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

//we will handle the returned data in onActivityResult

startActivityForResult(intent, PICK_IMAGE);

}

}

/**

 * Handle user returning from both capturing and cropping the image

 */

protected void onActivityResult(int requestCode, int resultCode, Intent 

data) {

    if (resultCode == RESULT_OK) {

        //user is returning from capturing an image using the camera

        if(requestCode == CAMERA_CAPTURE){

            //get the Uri for the captured image

            picUri = data.getData();

            //carry out the crop operation

            performCrop();

        }

        //user is returning from cropping the image

        else if(requestCode == PIC_CROP){

            //get the returned data

            Bundle extras = data.getExtras();

            //get the cropped bitmap

            Bitmap thePic = extras.getParcelable("data");

            //retrieve a reference to the ImageView

            ImageView picView = 

 (ImageView)findViewById(R.id.picture);

            //display the returned cropped image
            MediaStore.Images.Media.insertimage(getContentResolver(), thePic, "" , "");

            picView.setimageBitmap(thePic);

        }

        else if(requestCode == PICK_IMAGE)

        {

 picUri = data.getData();

            //carry out the crop operation

            performCrop();

        }}}

   /**

 * Helper method to carry out crop operation

 */

  private void performCrop(){

    //take care of exceptions

    try {

 //call the standard crop action intent (the user device may not support it)

        Intent cropIntent = new 

   Intent("com.android.camera.action.CROP"); 

   //indicate image type and Uri

        cropIntent.setDataAndType(picUri, "image/*");

        //set crop properties

        cropIntent.putExtra("crop", "false");

        //indicate aspect of desired crop

        cropIntent.putExtra("aspectX", 1);

        cropIntent.putExtra("aspectY", 1);

        //indicate output X and Y

        cropIntent.putExtra("outputX", 256);

        cropIntent.putExtra("outputY", 256);

        //retrieve data on return

        cropIntent.putExtra("return-data", true);

        //start the activity - we handle returning in onActivityResult

        startActivityForResult(cropIntent, PIC_CROP);  

     }

    //respond to users whose devices do not support the crop action

    catch(ActivityNotFoundException anfe){

        //display an error message

        String errorMessage = "Whoops - your device doesn't support the

   crop action!";

        Toast toast = Toast.makeText(this, errorMessage, 

   Toast.LENGTH_SHORT);

        toast.show();

    }

   }

  }

解决方法:

只需3个步骤即可完成-

1)Android清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="camera.test.demo"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".SimpleCameragalleryDemo"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

2)SimpleCameragallery演示代码

package camera.test.demo;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class SimpleCameragalleryDemo extends Activity {
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_galLERY = 2;
ImageView imgview;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

imgview = (ImageView) findViewById(R.id.imageView1);
Button buttonCamera = (Button) findViewById(R.id.btn_take_camera);`enter code here`
Button buttongallery = (Button) findViewById(R.id.btn_select_gallery);
buttonCamera.setonClickListener(new View.OnClickListener() {

public void onClick(View v) {
// call android default camera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
// ******** code for crop image
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 150);

try {

intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);

} catch (ActivityNotFoundException e) {
// Do nothing for Now
}
}
});
buttongallery.setonClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// Todo Auto-generated method stub
Intent intent = new Intent();
// call android default gallery
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// ******** code for crop image
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 150);

try {

intent.putExtra("return-data", true);
startActivityForResult(Intent.createChooser(intent,
"Complete action using"), PICK_FROM_galLERY);

} catch (ActivityNotFoundException e) {
// Do nothing for Now
}
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == PICK_FROM_CAMERA) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
imgview.setimageBitmap(photo);

}
}

if (requestCode == PICK_FROM_galLERY) {
Bundle extras2 = data.getExtras();
if (extras2 != null) {
Bitmap photo = extras2.getParcelable("data");
imgview.setimageBitmap(photo);

}
}
}
}

3)main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textViewAddCard"
android:layout_width="250dp"
android:layout_height="50dp"
android:text="Take Image"
android:textSize="16dp"
android:layout_gravity="center"
android:gravity="center"
android:typeface="sans"/>

<Button
android:id="@+id/btn_take_camera"
android:layout_width="250dp"
android:layout_height="50dp"
android:text="Take From Camera"
android:layout_marginTop="5dp"
android:layout_gravity="center"
android:typeface="sans"/>

<Button
android:id="@+id/btn_select_gallery"
android:layout_width="250dp"
android:layout_height="50dp"
android:text="Select from gallery"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:typeface="sans" />
<ImageView
android:id="@+id/imageView1"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

希望对您有帮助.

AngularJS $ rootScope$ broadcast在app.run中不起作用

AngularJS $ rootScope$ broadcast在app.run中不起作用

我在AngularJS
.run下有以下代码,该代码在我的本地开发计算机上可以正常运行,但在上传到客户端服务器后将无法工作…经过几次测试,很明显,在加载控制器时,事件并未尚未触发,因此取决于此事件的控制器中的大多数功能均无法正常工作。有人可以告诉我我在做什么错以及如何解决吗?谢谢

myApp.run(['AuthDataSvc','$rootScope',function (AuthDataSvc,$rootScope) {    
    AuthDataSvc.getAuth().then(function(Token){
        $rootScope.$broadcast('Token',Token);
    },function(status){
        console.log(status);
    });     
}]);

AngularJS $ rootScope。$ broadcast在app.run中不起作用

AngularJS $ rootScope。$ broadcast在app.run中不起作用

我在AngularJS
.run下有以下代码,该代码在我的本地开发计算机上可以正常运行,但在上传到客户端服务器后将无法工作…经过几次测试,很明显,在加载控制器时,事件并未尚未触发,因此取决于此事件的控制器中的大多数功能均无法正常工作。有人可以告诉我我在做什么错以及如何解决吗?谢谢

myApp.run([''AuthDataSvc'', ''$rootScope'', function (AuthDataSvc, $rootScope) {        AuthDataSvc.getAuth().then(function(Token){        $rootScope.$broadcast(''Token'', Token);    }, function(status){        console.log(status);    });     }]);

答案1

小编典典

你总是要有一个比赛条件。我可以选择几种替代方法:

1)使用服务。我并不是这个选项的忠实支持者,因为它会导致产生Spaghetti代码。大多数情况下,您不希望控制器在登录之前运行。我喜欢选项2。

 myApp.run([''AuthDataSvc'', ''$rootScope'', function (AuthDataSvc, $rootScope) {        AuthDataSvc.getAuth(); /* no op we will use the service to determine logged in */}]);/* inside a controller */if(AuthDataSvc.isLoggedIn()){      //do something.}

2)使用route.resolve。解析是在路由上定义的,并且只有在将诺言设置为已解析后,Controller才会加载。我为您展示了一个示例ui-routerng-route您需要选择毒药。如果您不使用ui-router,则应考虑使用。

/* app.config ... route config.. */var waitForLogon = {      UserToken: ["AuthDataSvc", function (AuthDataSvc) {         return AuthDataSvc.logon();      }]};//this is for ng-route $routeProvider   .when(''/Book/:bookId'', {      templateUrl: ''--'',      controller: ''MyCtrl'',      resolve: waitForLogon   })//this is for ui-router $stateProvider     .state(''me'', {            templateUrl: ''--'',            controller: ''MeCtrl'',            resolve: waitForLogon })

/* controller */ angular.module(''yourapp'')    .controller(''MyCtrl'', ["UserToken", ... , function(UserToken){                  //User Token will always be here when your Ctrl loads.   });

/* service code -- */angular.module(''yourapp'')    .service(''AuthDataSvc'', ["LogonModel", "$q", function(LogonModel, $q) {        this._q = null;        var that = this;        this._doAuth = function(){           this.getAuth().then(function(Token){ that._q.resolve(Token) }, function(error){that._q.reject(error);}        };        this.logon = function () {            if(!this._q){              this._q = $q.defer();               this._doAuth();// <-current auth do here, and resolve this._q when done            }            return this._q.promise;        };    });

AngularJS $rootScope.$broadcast在app.run中不起作用

AngularJS $rootScope.$broadcast在app.run中不起作用

我在我的AngularJS .run下面有以下代码,它在我的本地开发机器上完美运行但在上传到我的客户端服务器时无法工作…经过几次测试后很明显,当加载控制器时,事件不是触发但控制器中的大多数功能取决于此事件不起作用.有人可以告诉我我在这里做错了什么以及如何解决它?谢谢
myApp.run(['AuthDataSvc','$rootScope',function (AuthDataSvc,$rootScope) {    
    AuthDataSvc.getAuth().then(function(Token){
        $rootScope.$broadcast('Token',Token);
    },function(status){
        console.log(status);
    });     
}]);
你总是会有竞争条件.我有几个选择你可以做:

1)使用服务.我并不是这个选项的粉丝,因为它会导致Spaghetti代码.大多数时候你不希望控制器在你登录之前运行.我更喜欢选项2.

myApp.run(['AuthDataSvc',$rootScope) {    
    AuthDataSvc.getAuth(); /* no op we will use the service to determine logged in */
}]);


/* inside a controller */
if(AuthDataSvc.isLoggedIn()){
      //do something.
}

2)使用route.resolve.在路由上定义了解析,只有在将promise设置为已解决后,Controller才会加载.我向你展示了ui-router和ng-route的一个例子,你需要选择你的毒药.如果你不使用ui-router,你应该考虑它.

/* app.config ... route config.. */
var waitForlogon = {
      UserToken: ["AuthDataSvc",function (AuthDataSvc) {
         return AuthDataSvc.logon();
      }]
};

//this is for ng-route
 $routeProvider
   .when('/Book/:bookId',{
      templateUrl: '--',controller: 'MyCtrl',resolve: waitForlogon
   })


//this is for ui-router 
$stateProvider
     .state('me',{
            templateUrl: '--',controller: 'MeCtrl',resolve: waitForlogon
 })
/* controller */
 angular.module('yourapp')
    .controller('MyCtrl',["UserToken",...,function(UserToken){
                  //User Token will always be here when your Ctrl loads.
   });
/* service code -- */
angular.module('yourapp')
    .service('AuthDataSvc',["logonModel","$q",function(logonModel,$q) {
        this._q = null;
        var that = this;
        this._doAuth = function(){
           this.getAuth().then(function(Token){ that._q.resolve(Token) },function(error){that._q.reject(error);}
        };
        this.logon = function () {
            if(!this._q){
              this._q = $q.defer();
               this._doAuth();// <-current auth do here,and resolve this._q when done
            }
            return this._q.promise;
        };
    });

今天的关于上传裁剪后的图像不起作用 CropperJs上传照片裁剪框不会动的分享已经结束,谢谢您的关注,如果想了解更多关于android-我只想将裁剪后的图像保存到图库中.但会保存原始的完整图像.如何仅保存裁切后的图像?、AngularJS $ rootScope$ broadcast在app.run中不起作用、AngularJS $ rootScope。$ broadcast在app.run中不起作用、AngularJS $rootScope.$broadcast在app.run中不起作用的相关知识,请在本站进行查询。

本文标签: